Comparar commits

..

1 Commits

Autor SHA1 Mensagem Data
msweet 553ad826cc Import cups.org releases
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/tags/release-1.1.6@4306 a1ca3aef-8c08-0410-bb20-df032aa958be
2013-05-10 18:56:23 +00:00
334 arquivos alterados com 84758 adições e 53788 exclusões
+453 -1
Ver Arquivo
@@ -1,6 +1,458 @@
CHANGES.txt - 08/04/2000
CHANGES.txt - 01/24/2001
------------------------
CHANGES IN CUPS V1.1.6
- Fixed another possible DoS attack in httpGets()
- Added check for "LANGUAGE = PCL" and "LANGUAGE =
POSTSCRIPT" in mime.types.
- Resolution options were not being passed into the
filter programs properly.
- The default compiler options for GCC no longer includ
"-g3", which apparently is deprecated in newer
versions of GCC.
- CheckJobs() could cause cupsd to crash if a job is
cancelled in StartJob().
- The printers.conf and classes.conf files are now
written with restricted permissions.
- The round-robin algorithm used by FindAvailablePrinter()
had problems; fixes contributed by Joel Fredrikson.
- If LoadAllJobs() is unable to determine the file type
of a print job, assume "application/vnd.cups-raw".
- The web interface now provides a job_printer_name
value for any corresponding job_printer_uri value.
- The cups-lpd mini-daemon now logs the client address
and hostname as well as all commands and errors in the
syslog file.
- The IPP backend now detects the supported file formats
and only specifies the document format if it is
supported. This makes IPP printing to network print
servers and cards more reliable without affecting the
capabilities of CUPS servers.
- The time_at_xyz attributes are now converted to human-
readable dates and times for the web interfaces.
- The HP and EPSON sample drivers now correctly catch
signals and eject the current page when a job is
cancelled.
- Fixed bug in CGI code - did not ignore control
characters (e.g. newlines) in form data. This caused
sporatic web interface problems.
- The file type logging code in the scheduler referenced
the optional document-format attribute; the new code
uses the resolved MIME type instead.
- The client.conf parsing code now removes trailing
whitespace.
- The MaxJobs directive was being treated as a boolean
instead of an integer.
- The scheduler would not timeout remote printers if
BrowseInterval was set to 0.
- The lpadmin command now supports setting of options
and user-level access control.
- Added "-E" option to all printing commands to force
encryption.
- The client code did not consume the response to the
OPTIONS request when switching to secure mode.
- The scheduler did not output a Content-Length field
when responding to an OPTIONS request.
- Added documentation on using cups-lpd with xinetd
to the man page.
- The socket backend now starts retries at 5 seconds and
increases the interval to 30 seconds. This should
provide faster printing when multiple jobs/files are
queued for a printer.
- The filters and backends no longer buffer output to
stderr. This should provide much more accurate status
reporting.
CHANGES IN CUPS V1.1.5-2
- Fixed configure check for OpenSSL to work with RSA
code.
- Added configure check for <sys/ioctl.h>, and use this
check in backend/serial.c.
- Updated configure script handling of data,
configuration, and state directories to use datadir,
sysconfdir, and localstatedir variables.
- NetBSD uses different serial port filenames than
FreeBSD and OpenBSD.
- The pdftops filter didn't need some X-specific files.
- The scheduler makefile doesn't do a chown anymore when
installing (cupsd did this automatically on startup
anyways)
CHANGES IN CUPS V1.1.5-1
- There was a typo in the top-level Makefile
- The top-level Makefile did not install an init script
for run level 5.
- The configure script did not add the "crypto" library
when checking for the OpenSSL library.
- The OKIDATA PPD files were missing.
- The config.h.in file defined the wrong version number.
- The serial backend did not define "funky_hex" under *BSD.
- Updated the Visual C++ project files and some of the
CUPS API sources to compile under Windows again.
CHANGES IN CUPS V1.1.5
- Security updates - new default configuration does
not broadcast printer information and only allows
access from the local system.
- EXPERIMENTAL encryption support - CUPS now optionally
supports TLS/SSL encryption via the OpenSSL library.
- Documentation updates.
- Makefile/configure script updates.
- The RPM spec file didn't work out-of-the-box under
RedHat or Mandrake.
- Minor code cleanup to remove extraneous compiler
warnings.
- cupsTempFile() was using %p for the temporary
filename; this should have been %08x (just 8 digit
hex)
- Deleting a printer with active print jobs would still
crash the server.
- ippWrite() and ipp_write_file() didn't send the
correct value length for name-with-language and
text-with-language attributes.
- Updated IPP code to support copied strings (that
should not be freed); this provides slightly more
efficient IPP server performance.
- Updated PDF filter to Xpdf 0.91.
- httpGets() could go into an infinite loop if a line
longer than the input buffer size was sent by a
client. This could be used in a Denial-of-Service
attack.
- The lpstat and CUPS API functions now request only the
data required when getting the list of printer or
class information. This should improve performance
with large numbers of printers on slower machines.
- The scheduler was always enforcing the FilterLimit,
even if FilterLimit was set to 0.
- Updated the Linux USB backend to support Mandrake's
/dev/usb/usblp# filenames.
- The PRINTER and LPDEST environment variables did not
override the lpoptions default printer.
- The PPD read functions incorrectly included trailing
characters (usually whitespace) after quoted string
attributes.
- The multiple-document-handling attribute handling code
did not check for the correct value for collated
copies (separate-documents-uncollated-copies).
- The EPSON driver did not work with OKIDATA printers in
EPSON emulation mode (needed change-emulation command)
- The HP-GL/2 filter did not scale the plot properly in
scale mode 2.
- Added PPD files for 9-pin and 24-pin OKIDATA printers.
- The httpSeparate() function didn't handle passwords
that started with a number.
- ippDelete() could free the character set string
multiple times in name-with-language and
text-with-language attributes.
- The scheduler would access freed memory right after
freeing it (for debug messages); these parts of the
code have been reordered to avoid this situation
which was causing sporatic errors and crashes.
- The ppdClose() function didn't free all of the strings
in the ppd_file_t structure.
- The LoadAllJobs() function in the scheduler did not
close the spool directory.
- Changed all sprintf's that use string formats to
snprintf's, even if the destination buffer is
larger than the source string(s); this protects
against buffer overflows caused outside of CUPS...
- Changed all strcpy's to strncpy's between local and
global variables, even if the destination buffer is
larger than the source string; this protects
against buffer overflows caused outside of CUPS...
- The CUPS certificate functions didn't use the
CUPS_SERVERROOT environment variable when set.
- The directory services code was copying instead of
comparing the remote printer info, resulting in
unnecessary updates of the printer attributes for
remote printers.
- Added new mime.types rules to allow automatic raw
printing of PCL and ESC/P files; PJL headers are
parsed to differentiate between PostScript and
PCL job files. This should eliminate a lot of
the reports of SAMBA printing problems due to
the missing "-oraw" or "-l" options.
- The mimeLoadType() function didn't handle the
3-argument contains() function.
- The LoadPPDs() function in the scheduler didn't
properly set the alloc_ppds variable or handle a PPD
database containing 0 printers.
- The scheduler FindAvailablePrinter() function didn't
use the same queuing logic as the CheckJobs()
function. This caused classes to stall if a remote
printer was always busy.
- Jobs are now assigned to printers in a class
round-robin style. This should prevent the first
server in the class from bearing the brunt of the
jobs.
- The scheduler's LoadAllJobs() function didn't always
restore remote printers for queued jobs on startup.
- The serial backend didn't support the higher baud
rates with the old termios interface. It now supports
57600 and 115200 baud.
- The serial backend now supports different types of
flow control; previously it ignored the flow=XYZ
option in the device URI.
- The serial backend now supports DTR/DSR flow control,
which is popular on dot-matrix printers (access with
"flow=dtrdsr" in the device URI)
- Added new job-originating-host-name attribute for
jobs. The new attribute provides the hostname or
IP address of the machine that submitted the job.
- The set-job-attributes code no longer allows read-only
job attributes to be changed.
- Expanded the click area for the navigation bar in the
web interface.
- Updated the lp and cancel commands to support all of
the Solaris print options (some are simply ignored
since they do not map)
- Updated the scheduler to limit the number of file
descriptors to the maximum select() set size. This
was causing problems on Solaris systems where the
max FD count was increased beyond 1024.
- The scheduler's LoadDevices() function was getting
interrupted by the SIGCHLD signal handler; now ignore
child signals while loading devices.
- Added quota and allow/deny user support for printers
and classes.
- Removed black/CMY adjustment code from the PS and
image file RIPs; it was interfering with some CUPS
driver dithering code.
- The lpc program stopped listing the queue statuses
after the first active printer.
- The cups-lpd program used an output format that the
Solaris printing system did not understand.
- Updated the lpq program to use the Solaris format
except under Tru64 UNIX.
- Some DEC PPD files incorrectly use "Off" for the null
value in UI constraints. Added "Off" to the list of
accepted null values.
- Changed the *BSD define constants to __*BSD__ in all
of the backends.
- Added support for "lpstat printername", which is an
undocumented feature in Solaris.
- The HP-GL/2 filter now only sets the plot size if it
is set in the plot file.
- The lpmove command wasn't sending the requesting
user name, causing it to always fail.
- Updated the cupsTempFile() code to use GetTempPath()
under Windows.
- The cups-lpd mini-daemon didn't limit the number of
data files accepted, didn't use cupsTempFile(),
didn't handle control file job information in any
order, and didn't free job options after printing
a file.
- The scheduler copy_banner() function did not
explicitly set the owner and permissions of the banner
files, which could prevent the banner pages from
printing on some systems.
- The lpstat program wasn't listing remote classes.
- The scheduler did not verify that the printer-uri
attribute was specified in all requests that required
it.
CHANGES IN CUPS v1.1.4
- Makefile and configure script fixes.
- **** Changed the default Printcap setting **** to
/etc/printcap. There are just too many people asking
why application XYZ doesn't see their printers!
- The web admin interface now displays an error if it
can't get the list of printer drivers from cupsd.
- The IPP backend was putting the copies option before
the other job options were set. This caused the IPP
request to contain attribute groups in the wrong
order, which prevented remote printing.
- Added checks in scheduler to free memory used for
IPP requests and language information when closing
a client connection.
- Fixed the duplex option in the HP LaserJet driver. It
should now work with all LaserJet printers (and
compatibles)
- The add-printer web interface didn't initialize the
"old info" data pointer, which caused random crashes
on many OS's.
- Fixed many page sizes defined in the Level 1
compatibility file "gs_statd.ps" to match reality.
- Fixed another bug in the setpagedevice "code" in
Ghostscript. It should now accept all standard
Adobe attributes on all platforms.
- Fixed pstoraster so that it reallocates memory for
color depth changes as well as size/resolution
changes. This removes an ordering constraint on
the color, page size, and resolution options in
PPD files.
- The IPP backend didn't use the job's character set
when the destination printer supported it. This
caused problems when printing text files to other
CUPS servers.
- Updated the logic used to determine when to rebuild
the PPD file database. The scheduler now checks the
dates and the number of PPD files (was just checking
the dates.)
- Updated the ippSetCGIVars() function (used by the
web interfaces) to only filter valid string values.
- The PostScript filter was scaling 2-up pages
incorrectly. This caused the edges of some pages to
be clipped.
CHANGES IN CUPS v1.1.3
- Makefile fixes.
- RPM spec file changes.
- Documentation updates.
- Enabled pstoraster debug messages for everything
(only logged when LogLevel set to "debug"...)
- Changed the Input/OutputAttributes fix in
pstoraster so that it works on all platforms.
- The HP-GL/2 filter didn't set the right green
color value in encoded polylines or text.
- Updated the "fitplot" code to handle plot sizes
specified as "PSwidth,length" and "PSlength,width".
- Updated the Linux parallel and USB backends to open
the device files prior to looking in /proc for
autoprobe info. This makes sure that loadable device
driver modules are in fact loaded...
- Added new FilterLimit directive to limit the number
of processing jobs/filters on a system.
- set-job-attributes didn't change the job-state to
held/pending when the job-hold-until attribute was
specified.
- set-job-attributes didn't save the new job attributes.
- Now change the "requesting-user-name" attribute in
requests from remote systems to "remroot" when an
unauthenticated "root" user is sent. This can be
changed using the new RemoteRoot directive in
cupsd.conf.
- The cancel-job, hold-job, release-job, and restart-job
operations didn't log the authenticated username.
- The cups-lpd mini-daemon now checks for a
document-format option before forcing raw mode with
filter mode 'l'.
- The cups-lpd mini-daemon now supports "-o" options
on the command-line (passed by inetd) to set global
defaults for all print queues.
- The pstops filter assumed that a file with a Trailer
comment would also have an EOF comment.
- Added new cupsSetPasswordCB(), cupsSetServer(),
cupsSetUser(), and ippSetPort() functions to better
support client applications (especially GUIs...)
- The CUPS-add-class and CUPS-add-printer operations
didn't reset the printer-name attribute on remote
print queues that had to be renamed when a local
printer was defined with the same name.
- The lpoptions command now supports a "-r" option to
remove options for a printer or instance.
- The lpadmin and admin.cgi programs no longer allow
class and printer names to begin with a number; this
caused the command-line utilities to become confused.
- The Linux USB backend now looks for both the parallel
and usblp driver names in the device list.
- Added a new FontPath directive to cupsd.conf, and also
a "--with-fontpath" option for the configure script to
specify alternate font paths for pstoraster.
- The CUPS-move-job operation didn't update the
job-printer-uri attribute.
- The scheduler only looked up printers and classes by
name in IPP requests, instead of using the full URI.
This caused problems with KUPS and friends with
remote printers.
- The scheduler now handles better localization of
hostnames (e.g. server is host.foo.com, remote is
host.subfoo.foo.com, localized is not host.subfoo...)
- The scheduler logging functions now use a common
log file checking/rotation function (courtesy of
Crutcher Dunnavant at Red Hat)
- The scheduler could accept more client connections
than it allocated for if more than one Port or Listen
line was present in cupsd.conf.
- Other minor scheduler performance tweeks.
- The lpq and lprm commands didn't support the default
printer set using lpoptions.
- The lpoptions command now supports a "-l" option to
list the printer-specific options and their current
settings.
- The web printer and class lists now show a link to the
default printer or class at the top of the page.
- The text filter now supports pretty printing of shell
and perl scripts as well as C/C++ source files.
- The top and bottom margins were reversed for landscape
text printing.
- The lpq and lprm commands didn't understand printer
instances.
- The scheduler only selected on the first 100 file
descriptors instead of the maximum file descriptor
limit.
- The scheduler client, listener, and mainline functions
now share code to disable and enable monitoring for
new client connections.
- The imagetoraster filter didn't support all of the
required pagedevice parameters.
- The serial backend now checks for 100 serial ports
under Linux.
- The scheduler used sscanf() to pull out the remote
printer location, description, and make/model strings,
but if any of these options was empty then sscanf()
would stop processing.
- Added "debug2" log level to provide a little less
verbose debugging information at the "debug" level.
- The scheduler would crash if you stopped a printer
that was currently printing a job.
- The scheduler incorrectly allowed jobs in the cancelled,
aborted, or completed state to be cancelled.
- The image filters did not load TIFF images properly
for bottom-to-top and right-to-left orientations.
- Added new cupsEncodeOptions() function to encode
CUPS options as IPP job attributes.
- The IPP backend, LPD mini-daemon, client commands,
and CUPS API did not properly encode multiple
option values separated by commas.
- Added new scheduler malloc logging in debug mode
(provides summary of total arena size, allocated,
and free bytes once a minute)
- The EPM-based distributions didn't install the
correct symlinks for a few man pages.
- Fixed a memory leak in the scheduler - wasn't
freeing old filters when deleting or renaming
printers.
- The scheduler now queries the primary IP address
for the name of the server and maps any incoming
requests from that address to the server name.
This fixes web admin mapping problems from
server.domain.com to localhost.
- The web printer modify interface now remembers
the previous device and driver settings (except
for serial ports.)
- The job-k-octets attribute is now stored as part of
the job attributes; this preserves the information
after a job is completed when job file history is
turned off.
- Dropped option sub-group parsing code for the moment,
since many Xerox PPD files abuse this feature in PPD
files and don't follow the hierarchy rules.
- Added new wrapper code around options so that duplex
options for some HP printers don't prevent prints.
- Added support for Digital UNIX/Tru64 UNIX/OSF/1 format
for "lpstat -v" output.
- Now show the URI for remote printers instead of
/dev/null in "lpstat -v" output.
- Creating classes and adding printers to a class with
the lpadmin command didn't work.
- The banner pages and test page should now format
correctly in both portrait and landscape orientations.
- Updated banner page substitution so that { can appear
by itself without quoting.
CHANGES IN CUPS v1.1.2
- Makefile/configure fixes
+133
Ver Arquivo
@@ -0,0 +1,133 @@
ENCRYPTION - CUPS v1.1.6 - 01/23/2001
-------------------------------------
This file describes the encryption support provided by CUPS.
WARNING: CLIENTS CURRENTLY TRUST ALL CERTIFICATES FROM SERVERS.
This makes the CUPS client applications vulnerable to "man in
the middle" attacks, so we don't recommend using this to do
remote administration over WANs at this time.
Future versions of CUPS will keep track of server certificates
and provide a callback/confirmation interface for accepting new
certificates and warning when a certificate has changed.
LEGAL STUFF
BEFORE USING THE ENCRYPTION SUPPORT, PLEASE VERIFY THAT IT IS
LEGAL TO DO SO IN YOUR COUNTRY. CUPS by itself doesn't include
any encryption code, but it can link against the OpenSSL library
which does.
OVERVIEW OF ENCRYPTION SUPPORT IN CUPS
CUPS supports SSL/2.0, SSL/3.0, and TLS/1.0 encryption using
keys as large as 128-bits. Encryption support is provided via
the OpenSSL library and some new hooks in the CUPS code.
CUPS provides support for dedicated (https) and "upgrade" (TLS)
encryption of sessions. The "HTTP Upgrade" method is described
in RFC 2817; basically, the client can be secure or unsecure,
and the client or server initiates an upgrade to a secure
connection via some new HTTP fields and status codes. The HTTP
Upgrade method is new and no browsers we know of support it yet.
Stick with "https" for web browsers.
The current implementation is very basic. The CUPS client
software (lp, lpr, etc.) uses encryption as requested by the
user or server.
The user can specify the "-E" option with the printing commands
to force encryption of the connection. Encryption can also be
specified using the Encryption directive in the client.conf file
or in the CUPS_ENCRYPTION environment variable:
Never
Never do encryption.
Always
Always do SSL/TLS encryption using the https scheme.
IfRequested
Upgrade to TLS encryption if the server asks for it.
This is the default setting.
Required
Always upgrade to TLS encryption as soon as the
connection is made. This is different than the "Always"
mode above since the connection is initially unsecure
and the client initiates the upgrade to TLS encryption.
(same as using the "-E" option)
These keywords are also used in the cupsd.conf file to secure
particular locations. To secure all traffic on the server, listen
on port 443 (https port) instead of port 631 and change the "ipp"
service listing (or add it if you don't have one) in /etc/services
to 443.
BEFORE YOU BEGIN
You'll need the OpenSSL library from:
http://www.openssl.org
CONFIGURING WITH ENCRYPTION SUPPORT
Once you have the OpenSSL library installed, you'll need to
configure CUPS to use it with the "--enable-ssl" option:
./configure --enable-ssl
If the OpenSSL stuff is not in a standard location, make sure to
define the CFLAGS, CXXFLAGS, and LDFLAGS environment variables
with the appropriate compiler and linker options first.
GENERATING A SERVER CERTIFICATE AND KEY
The following OpenSSL command will generate a server certificate
and key that you can play with. Since the certificate is not
properly signed it will generate all kinds of warnings in
Netscape and MSIE:
openssl req -new -x509 -keyout /etc/cups/ssl/server.key \
-out /etc/cups/ssl/server.crt -days 365 -nodes
chmod 600 /etc/cups/ssl/server.*
The "-nodes" option prevents the certificate and key from being
encrypted. The cupsd process runs in the background, detached
from any input source; if you encrypt these files then cupsd
will not be able to load them!
Send all rants about non-encrypted certificate and key files to
/dev/null. It makes sense to encrypt user files, but not for
files used by system processes/daemons...
REPORTING PROBLEMS
If you have problems, READ THE DOCUMENTATION FIRST! If the
documentation does not solve your problems please send an email
to "cups-support@cups.org". Include your operating system and
version, compiler and version, and any errors or problems you've
run into. The "/var/log/cups/error_log" file should also be sent,
as it often helps to determine the cause of your problem.
If you are running a version of Linux, be sure to provide the
Linux distribution you have, too.
Please note that the "cups-support@cups.org" email address goes
to the CUPS developers; they are busy people, so your email may
go unanswered for days or weeks. In general, only general build
or distribution problems will actually get answered - for
end-user support see the "README.txt" for a summary of the
resources available.
+157
Ver Arquivo
@@ -0,0 +1,157 @@
INSTALL - CUPS v1.1.6 - 01/23/2001
----------------------------------
This file describes how to compile and install CUPS from source
code. For more information on CUPS see the file called
"README.txt". A complete change log can be found in
"CHANGES.txt".
BEFORE YOU BEGIN
You'll need ANSI-compliant C and C++ compilers, plus a make
program and Bourne shell. The GNU compiler tools work well -
we've tested the current CUPS code against GCC 2.95.x with
excellent results.
The makefiles used by the project should work with all versions
of make. We've tested them with GNU make as well as the make
programs shipped by Compaq, HP, SGI, and Sun. FreeBSD users
should use GNU make (gmake).
Besides these tools you'll want the following libraries:
- JPEG 6b or higher
- PNG 1.0.6 or higher
- TIFF 3.4 or higher
- ZLIB 1.1.3 or higher
CUPS will compile and run without these, however you'll miss out on
many of the features provided by CUPS.
CONFIGURATION
CUPS uses GNU autoconf, so you should find the usual "configure"
script in the main CUPS source directory. To configure CUPS for
your system, type:
./configure ENTER
The default installation will put the CUPS software in the
"/etc", "/usr", and "/var" directories on your system, which
will overwrite any existing printing commands on your system.
Use the "--prefix" option to install the CUPS software in
another location:
./configure --prefix=/some/directory ENTER
If the PNG, JPEG, TIFF, and ZLIB libraries are not installed in
a system default location (typically "/usr/include" and
"/usr/lib") you'll need to set the CFLAGS, CXXFLAGS, and LDFLAGS
environment variables prior to running configure:
setenv CFLAGS "-I/some/directory" ENTER
setenv CXXFLAGS "-I/some/directory" ENTER
setenv LDFLAGS "-L/some/directory" ENTER
./configure ... ENTER
or:
CFLAGS="-I/some/directory"; export CFLAGS ENTER
CXXFLAGS="-I/some/directory"; export CXXFLAGS ENTER
LDFLAGS="-L/some/directory"; export LDFLAGS ENTER
./configure ... ENTER
To enable support for encryption, you'll also want to add the
"--enable-ssl" option:
./configure --enable-ssl
SSL and TLS support require the OpenSSL library, available at:
http://www.openssl.org
See the file "ENCRYPTION.txt" for information on using the
encryption support in CUPS.
Once you have configured things, just type:
make ENTER
or if you have FreeBSD:
gmake ENTER
to build the software.
INSTALLING THE SOFTWARE
Once you have built the software you need to install it. The
"install" target provides a quick way to install the software on
your local system:
make install ENTER
or for FreeBSD:
gmake install ENTER
You can also build binary packages that can be installed on other
machines using the RPM spec file ("cups.spec") or EPM list file
("cups.list"). The latter also supports building of binary RPMs,
so it may be more convenient to use - we use EPM to build all of
our binary distributions.
You can find the RPM software at:
http://www.rpm.org
The RPM software is at:
http://www.easysw.com/epm
CREATING BINARY DISTRIBUTIONS WITH EPM
The top level makefile supports generation of many types of binary
distributions using EPM. To build a binary distribution type:
make <format> ENTER
or
gmake <format> ENTER
for FreeBSD, where <format> is one of the following:
epm - Builds a portable shell script and tar file based
distribution. This format will also backup your
existing printing system if you decide to remove
CUPS at some future time.
rpm - Builds a RPM binary distribution.
deb - Builds a Debian binary distribution.
depot - Builds a HP-UX binary distribution.
pkg - Builds a Solaris binary distribution.
tardist - Builds an IRIX binary distribution.
REPORTING PROBLEMS
If you have problems, READ THE DOCUMENTATION FIRST! If the
documentation does not solve your problems please send an email
to "cups-support@cups.org". Include your operating system and
version, compiler and version, and any errors or problems you've
run into. The "/var/log/cups/error_log" file should also be sent,
as it often helps to determine the cause of your problem.
If you are running a version of Linux, be sure to provide the
Linux distribution you have, too.
Please note that the "cups-support@cups.org" email address goes
to the CUPS developers; they are busy people, so your email may
go unanswered for days or weeks. In general, only general build
or distribution problems will actually get answered - for
end-user support see the "README.txt" for a summary of the
resources available.
+3 -2
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Common makefile definitions for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
# Copyright 1997-2001 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
@@ -30,7 +30,6 @@ AR = @AR@
AWK = @AWK@
CC = @LIBTOOL@ @CC@
CHMOD = @CHMOD@
CHOWN = @CHOWN@
CP = @CP@
CXX = @LIBTOOL@ @CXX@
DSO = @DSO@
@@ -63,6 +62,7 @@ INSTALL_SYSV = @INSTALL_SYSV@
LIBCUPS = @LIBCUPS@
LIBCUPSIMAGE = @LIBCUPSIMAGE@
LIBJPEG = @LIBJPEG@
LIBMALLOC = @LIBMALLOC@
LIBPNG = @LIBPNG@
LIBTIFF = @LIBTIFF@
LIBZ = @LIBZ@
@@ -87,6 +87,7 @@ LIBS = $(LINKCUPS) $(NETLIBS) @LIBS@
NETLIBS = @NETLIBS@
OPTIM = @OPTIM@
OPTIONS =
SSLLIBS = @SSLLIBS@
#
# Directories...
+22 -11
Ver Arquivo
@@ -70,14 +70,25 @@ install:
(cd fonts; $(MAKE) $(MFLAGS) install)
echo Installing in locale...
(cd locale; $(MAKE) $(MFLAGS) install)
echo Installing in ppd...
(cd ppd; $(MAKE) $(MFLAGS) install)
echo Installing in templates...
(cd templates; $(MAKE) $(MFLAGS) install)
echo Installing startup script...
if test "x$INITDIR" != "x"; then \
$(INSTALL_SCRIPT) cups.sh $prefix/$INITDIR/init.d/cups; \
$(CHMOD) ugo+rx $prefix/$INITDIR/init.d/cups; \
ln -s $INITDDIR/cups $prefix/$INITDIR/rc0.d/K00cups; \
ln -s $INITDDIR/cups $prefix/$INITDIR/rc2.d/S99cups; \
if test "x$(INITDIR)" != "x"; then \
$(MKDIR) $(prefix)/$(INITDIR)/init.d; \
$(RM) $(prefix)/$(INITDIR)/init.d/cups; \
$(INSTALL_SCRIPT) cups.sh $(prefix)/$(INITDIR)/init.d/cups; \
$(CHMOD) ugo+rx $(prefix)/$(INITDIR)/init.d/cups; \
$(MKDIR) $(prefix)/$(INITDIR)/rc0.d; \
$(RM) $(prefix)/$(INITDIR)/rc0.d/K00cups; \
ln -s $(INITDDIR)/cups $(prefix)/$(INITDIR)/rc0.d/K00cups; \
$(MKDIR) $(prefix)/$(INITDIR)/rc3.d; \
$(RM) $(prefix)/$(INITDIR)/rc3.d/S99cups; \
ln -s $(INITDDIR)/cups $(prefix)/$(INITDIR)/rc3.d/S99cups; \
$(MKDIR) $(prefix)/$(INITDIR)/rc5.d; \
$(RM) $(prefix)/$(INITDIR)/rc5.d/S99cups; \
ln -s $(INITDDIR)/cups $(prefix)/$(INITDIR)/rc5.d/S99cups; \
fi
#
@@ -86,12 +97,12 @@ install:
EPMFLAGS = -v \
BINDIR=$(BINDIR) DATADIR=$(DATADIR) \
DOCDIR=$(DOCDIR) ESP_ROOT=$(ESP_ROOT) \
INCLUDEDIR=$(INCLUDEDIR) LIBDIR=$(LIBDIR) \
LOCALEDIR=$(LOCALEDIR) LOGDIR=$(LOGDIR) \
MANDIR=$(MANDIR) PAMDIR=$(PAMDIR) \
REQUESTS=$(REQUESTS) SBINDIR=$(SBINDIR) \
SERVERBIN=$(SERVERBIN) SERVERROOT=$(SERVERROOT)
DOCDIR=$(DOCDIR) INCLUDEDIR=$(INCLUDEDIR) \
LIBDIR=$(LIBDIR) LOCALEDIR=$(LOCALEDIR) \
LOGDIR=$(LOGDIR) MANDIR=$(MANDIR) \
PAMDIR=$(PAMDIR) REQUESTS=$(REQUESTS) \
SBINDIR=$(SBINDIR) SERVERBIN=$(SERVERBIN) \
SERVERROOT=$(SERVERROOT)
epm:
epm $(EPMFLAGS) cups
+137 -127
Ver Arquivo
@@ -1,52 +1,59 @@
README - CUPS v1.1.2 - 08/04/2000
README - CUPS v1.1.6 - 01/23/2001
---------------------------------
Looking for compile instructions? Read the file "INSTALL.txt"
instead...
INTRODUCTION
CUPS provides a portable printing layer for UNIX(r)-based operating
systems. It has been developed by Easy Software Products to promote a
standard printing solution for all UNIX vendors and users. CUPS
provides the System V and Berkeley command-line interfaces.
CUPS provides a portable printing layer for UNIX(r)-based
operating systems. It has been developed by Easy Software
Products to promote a standard printing solution for all UNIX
vendors and users. CUPS provides the System V and Berkeley
command-line interfaces.
CUPS uses the Internet Printing Protocol ("IPP") as the basis for
managing print jobs and queues. The Line Printer Daemon ("LPD") Server
Message Block ("SMB"), and AppSocket (a.k.a. JetDirect) protocols are
also supported with reduced functionality. CUPS adds network printer
browsing and PostScript Printer Description ("PPD") based printing
options to support real-world printing under UNIX.
CUPS uses the Internet Printing Protocol ("IPP") as the basis
for managing print jobs and queues. The Line Printer Daemon
("LPD") Server Message Block ("SMB"), and AppSocket (a.k.a.
JetDirect) protocols are also supported with reduced
functionality. CUPS adds network printer browsing and
PostScript Printer Description ("PPD") based printing options to
support real-world printing under UNIX.
CUPS also includes a customized version of GNU Ghostscript (currently
based off GNU Ghostscript 5.50) and an image file RIP that are used to
support non-PostScript printers. Sample drivers for HP and EPSON
printers are included that use these filters.
CUPS also includes a customized version of GNU Ghostscript
(currently based off GNU Ghostscript 5.50) and an image file RIP
that are used to support non-PostScript printers. Sample
drivers for HP and EPSON printers are included that use these
filters.
Drivers for over 2300 printers are provided with our ESP Print Pro
software, available at:
Drivers for over 2300 printers are provided with our ESP Print
Pro software, available at:
http://www.easysw.com/printpro
CUPS is licensed under the GNU General Public License and GNU Library
General Public License. Please contact Easy Software Products for
commercial support and "binary distribution" rights.
CUPS is licensed under the GNU General Public License and GNU
Library General Public License. Please contact Easy Software
Products for commercial support and "binary distribution"
rights.
SYSTEM REQUIREMENTS
Binary distributions require a minimum of 10MB of free disk space. We
do not recommend using CUPS on a workstation with less than 32MB of RAM
or a PC with less than 16MB of RAM.
Binary distributions require a minimum of 10MB of free disk
space. We do not recommend using CUPS on a workstation with less
than 32MB of RAM or a PC with less than 16MB of RAM.
If you are installing from source you'll need ANSI-compliant C and C++
compilers and optionally one or more image file support libraries.
Complete source installation instructions can be found in the CUPS
System Administrator's Manual in the files "doc/sam.html" or
"doc/sam.pdf".
If you are installing from source you'll need ANSI-compliant C
and C++ compilers and optionally one or more image file support
libraries. Complete source installation instructions can be
found in the file "INSTALL.txt".
SOFTWARE REQUIREMENTS
The following operating system software is required to install one of
the binary distributions from Easy Software Products:
The following operating system software is required to install
one of the binary distributions from Easy Software Products:
- Digital UNIX (aka OSF1 aka Compaq Tru64 UNIX) 4.0 or higher
- HP-UX 10.20 or higher
@@ -57,77 +64,104 @@ the binary distributions from Easy Software Products:
INSTALLING "PORTABLE" CUPS DISTRIBUTIONS
We are currently distributing "portable" CUPS binary distributions in
TAR format with installation and removal scripts generated by our ESP
Package Manager (EPM) software, which is available from:
We are currently distributing "portable" CUPS binary
distributions in TAR format with installation and removal
scripts generated by our ESP Package Manager (EPM) software,
which is available from:
http://www.easysw.com/epm
WARNING: Installing CUPS will overwrite your existing printing system.
Backup files are made by the installation script and restored by the
removal script, so if you experience problems you should be able to
remove the CUPS software to restore your previous configuration.
However, Easy Software Products makes no warranty for this and will not
be liable for any lost revenues, etc.
WARNING: Installing CUPS will overwrite your existing printing
system. Backup files are made by the installation script and
restored by the removal script, so if you experience problems
you should be able to remove the CUPS software to restore your
previous configuration. However, Easy Software Products makes
no warranty for this and will not be liable for any lost
revenues, etc.
To install the CUPS software you will need to be logged in as root
(doing an "su" is good enough). Once you are the root user, run the
installation script with:
To install the CUPS software you will need to be logged in as
root (doing an "su" is good enough). Once you are the root
user, run the installation script with:
./cups.install ENTER
After asking you a few yes/no questions the CUPS software will be
installed and the scheduler will be started automatically.
After asking you a few yes/no questions the CUPS software will
be installed and the scheduler will be started automatically.
INSTALLING HOST-SPECIFIC (RPM, DEBIAN, ETC.) DISTRIBUTIONS
The host-specific distributions use the operating system software
installation tools. To install a host-specific distribution please
consult the CUPS Software Administrators Manual or your operating
system documentation.
The host-specific distributions use the operating system
software installation tools. To install a host-specific
distribution please consult the CUPS Software Administrators
Manual or your operating system documentation.
READING THE DOCUMENTATION
Once you have installed the software you can access the documentation
(and a bunch of other stuff) on-line at:
Once you have installed the software you can access the
documentation (and a bunch of other stuff) on-line at:
http://localhost:631
If you're having trouble getting that far, the documentation is located
in the "/usr/share/doc/cups" directory in the binary distributions, and
under the "doc" directory in the source archives.
If you're having trouble getting that far, the documentation is
located in the "/usr/share/doc/cups" directory in the binary
distributions, and under the "doc" directory in the source
archives.
Please read the documentation before asking questions.
GETTING SUPPORT AND OTHER RESOURCES
If you have problems, READ THE DOCUMENTATION FIRST!
You can subscribe to the CUPS mailing list by sending a message
containing "subscribe cups" to majordomo@cups.org. This list is
provided to discuss problems, questions, and improvements to the
CUPS software. New releases of CUPS are announced to this list
as well.
Commercial support (with a guaranteed response time) is
available from Easy Software Products. For more information
see:
http://www.easysw.com/cups
See the CUPS web site at "http://www.cups.org" for other site
links.
SETTING UP PRINTER QUEUES USING YOUR WEB BROWSER
CUPS 1.1 includes a new web-based administration tool that allows you
to manage printers, classes, and jobs on your server. To access the
printer administration tools open the following URL in your browser:
CUPS 1.1 includes a new web-based administration tool that
allows you to manage printers, classes, and jobs on your
server. To access the printer administration tools open the
following URL in your browser:
http://localhost:631/admin
You will be asked for the administration password (root or any other
user in the sys/system/root group on your system) and then shown a
menu of available functions.
You will be asked for the administration password (root or any
other user in the sys/system/root group on your system) and then
shown a menu of available functions.
DO NOT use the hostname for your machine - it will not work with the
default CUPS configuration. To enable administration access on other
addresses, consult the CUPS Software Administrators Manual.
DO NOT use the hostname for your machine - it will not work with
the default CUPS configuration. To enable administration access
on other addresses, consult the CUPS Software Administrators
Manual.
SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE
CUPS works best with PPD (PostScript Printer Description) files. In a
pinch you can also use System V style printer interface scripts.
CUPS works best with PPD (PostScript Printer Description)
files. In a pinch you can also use System V style printer
interface scripts.
Six sample PPD files are provided with this distribution that utilize
the PostScript and image file RIPs and the sample EPSON and HP printer
drivers. To add the sample DeskJet driver to the system for a printer
connected to the parallel port, use one of the following commands:
Six sample PPD files are provided with this distribution that
utilize the PostScript and image file RIPs and the sample EPSON
and HP printer drivers. To add the sample DeskJet driver to the
system for a printer connected to the parallel port, use one of
the following commands:
Digital UNIX:
@@ -163,91 +197,67 @@ Similarly, for the other sample drivers you can use:
EPSON 9-pin Series epson9.ppd
EPSON 24-pin Series epson24.ppd
These sample drivers provide basic printing capabilities, but generally
do not exercise the full potential of the printers or CUPS. For
commercial printer drivers check out our ESP Print Pro software at:
These sample drivers provide basic printing capabilities, but
generally do not exercise the full potential of the printers or
CUPS. For commercial printer drivers check out our ESP Print
Pro software at:
http://www.easysw.com/printpro
PRINTING FILES
CUPS provides both the System V "lp" and Berkeley "lpr" commands for
printing:
CUPS provides both the System V "lp" and Berkeley "lpr" commands
for printing:
lp filename
lpr filename
Both the "lp" and "lpr" commands support printing options for the
driver:
Both the "lp" and "lpr" commands support printing options for
the driver:
lp -omedia=A4 -oresolution=600dpi filename
lpr -omedia=A4 -oresolution=600dpi filename
CUPS recognizes many types of images files as well as PDF, PostScript,
HP-GL/2, and text files, so you can print those files directly rather
than through an application.
CUPS recognizes many types of images files as well as PDF,
PostScript, HP-GL/2, and text files, so you can print those
files directly rather than through an application.
If you have an application that generates output specifically for your
printer then you need to use the "-oraw" or "-l" options:
If you have an application that generates output specifically
for your printer then you need to use the "-oraw" or "-l"
options:
lp -oraw filename
lpr -l filename
This will prevent the filters from misinterpreting your print file.
REPORTING PROBLEMS
If you have problems, READ THE DOCUMENTATION FIRST! If the
documentation does not solve your problems please send an email to
cups-support@cups.org. Include your operating system and version,
compiler and version, and any errors or problems you've run into. The
/var/log/error_log file should also be sent, as it often helps to
determine the cause of your problem.
If you are running a version of Linux, be sure to provide the Linux
distribution you have, too.
Please note that the "cups-support@cups.org" email address goes to the
CUPS developers; they are busy people, so your email may go unanswered
for days or weeks. Commercial support (with a guaranteed response
time) is available from Easy Software Products.
OTHER RESOURCES
See the CUPS web site at "http://www.cups.org" for other site links.
You can subscribe to the CUPS mailing list by sending a message
containing "subscribe cups" to majordomo@cups.org. This list is
provided to discuss problems, questions, and improvements to the CUPS
software. New releases of CUPS are announced to this list as well.
This will prevent the filters from misinterpreting your print
file.
LEGAL STUFF
CUPS is Copyright 1993-2000 by Easy Software Products. CUPS, the CUPS
logo, and the Common UNIX Printing System are the trademark property of
Easy Software Products.
CUPS is Copyright 1993-2001 by Easy Software Products. CUPS,
the CUPS logo, and the Common UNIX Printing System are the
trademark property of Easy Software Products.
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
The PostScript RIP software (pstoraster) is based on the GNU
Ghostscript 5.50 core, Copyright 1986-1998 by Aladdin Enterprises.
Ghostscript 5.50 core, Copyright 1986-1998 by Aladdin
Enterprises.
The PDF filter (pdftops) is based on the Xpdf 0.90 software, Copyright
1996-1999 by Derek B. Noonburg.
The PDF filter (pdftops) is based on the Xpdf 0.90 software,
Copyright 1996-1999 by Derek B. Noonburg.
This software is based in part on the work of the Independent JPEG
Group.
This software is based in part on the work of the Independent
JPEG Group.
CUPS is provided under the terms of the GNU General Public License and
GNU Library General Public License. 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 "LICENSE.html", "LICENSE.txt", or "cups.license" files
for more information.
CUPS is provided under the terms of the GNU General Public
License and GNU Library General Public License. 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 "LICENSE.html",
"LICENSE.txt", or "cups.license" files for more information.
For commercial licensing information, please contact:
@@ -260,7 +270,7 @@ For commercial licensing information, please contact:
Email: cups-info@cups.org
WWW: http://www.cups.org
Note that commercial licensors may also require a license from Artifex
Software Inc. which handles commercial licensing of the Ghostscript
software, and from Derek B. Noonburg who developed the Xpdf software
used to print PDF files.
Note that commercial licensors may also require a license from
Artifex Software Inc. which handles commercial licensing of the
Ghostscript software, and from Derek B. Noonburg who developed
the Xpdf software used to print PDF files.
+2 -2
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Backend makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
# Copyright 1997-2001 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
@@ -41,7 +41,7 @@ all: $(TARGETS)
#
clean:
$(RM) $(OBJS) $(TARGETS)
$(RM) $(OBJS) $(TARGETS) http
#
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Backend test program for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+101 -128
Ver Arquivo
@@ -3,7 +3,7 @@
*
* IPP backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -54,10 +54,6 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
int n, n2; /* Attribute values */
char *option, /* Name of option */
*s; /* Pointer into option value */
const char *val; /* Pointer to option value */
int num_options; /* Number of printer options */
cups_option_t *options; /* Printer options */
char method[255], /* Method in URI */
@@ -73,9 +69,13 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
FILE *fp; /* File to print */
http_t *http; /* HTTP connection */
ipp_t *request, /* IPP request */
*response; /* IPP response */
*response, /* IPP response */
*supported; /* get-printer-attributes response */
ipp_attribute_t *job_id; /* job-id attribute */
ipp_attribute_t *copies_sup; /* copies-supported attribute */
ipp_attribute_t *charset_sup; /* charset-supported attribute */
ipp_attribute_t *format_sup; /* document-format-supported attribute */
const char *charset; /* Character set to use */
cups_lang_t *language; /* Default language */
struct stat fileinfo; /* File statistics */
size_t nbytes, /* Number of bytes written */
@@ -89,8 +89,20 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
int version; /* IPP version */
/*
* Make sure status messages are not buffered...
*/
setbuf(stderr, NULL);
/*
* Check command-line...
*/
if (argc == 1)
{
char *s;
if ((s = strrchr(argv[0], '/')) != NULL)
s ++;
else
@@ -203,9 +215,12 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* don't support the copies attribute...
*/
language = cupsLangDefault();
copies_sup = NULL;
version = 1;
language = cupsLangDefault();
charset_sup = NULL;
copies_sup = NULL;
format_sup = NULL;
version = 1;
supported = NULL;
do
{
@@ -247,7 +262,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Do the request...
*/
for (;;)
for (response = NULL, ipp_status = IPP_BAD_REQUEST;;)
{
/*
* POST the request, retrying as needed...
@@ -284,12 +299,15 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
if (supported)
ippDelete(supported);
if (status == HTTP_OK)
{
response = ippNew();
ippRead(http, response);
supported = ippNew();
ippRead(http, supported);
ipp_status = response->request.status.status_code;
ipp_status = supported->request.status.status_code;
if (ipp_status > IPP_OK_CONFLICT)
{
@@ -316,7 +334,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
status = HTTP_ERROR;
}
}
else if ((copies_sup = ippFindAttribute(response, "copies-supported",
else if ((copies_sup = ippFindAttribute(supported, "copies-supported",
IPP_TAG_RANGE)) != NULL)
{
/*
@@ -328,15 +346,27 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
copies_sup = NULL; /* No */
}
ippDelete(response);
charset_sup = ippFindAttribute(supported, "charset-supported",
IPP_TAG_CHARSET);
format_sup = ippFindAttribute(supported, "document-format-supported",
IPP_TAG_MIMETYPE);
if (format_sup)
{
fprintf(stderr, "DEBUG: document-format-supported (%d values)\n",
format_sup->num_values);
for (i = 0; i < format_sup->num_values; i ++)
fprintf(stderr, "DEBUG: [%d] = \"%s\"\n", i,
format_sup->values[i].string.text);
}
}
else
{
response = NULL;
supported = NULL;
if (status == HTTP_ERROR)
{
fprintf(stderr, "WARNING: Did not receive the IPP response (%d)\n",
fprintf(stderr, "WARNING: Did not receive the IPP supported (%d)\n",
errno);
status = HTTP_OK;
ipp_status = IPP_PRINTER_BUSY;
@@ -395,6 +425,43 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
else
copies = atoi(argv[4]);
/*
* Figure out the character set to use...
*/
charset = language ? cupsLangEncoding(language) : "us-ascii";
if (charset_sup)
{
/*
* See if IPP server supports the requested character set...
*/
for (i = 0; i < charset_sup->num_values; i ++)
if (strcasecmp(charset, charset_sup->values[i].string.text) == 0)
break;
/*
* If not, choose us-ascii or utf-8...
*/
if (i >= charset_sup->num_values)
{
/*
* See if us-ascii is supported...
*/
for (i = 0; i < charset_sup->num_values; i ++)
if (strcasecmp("us-ascii", charset_sup->values[i].string.text) == 0)
break;
if (i < charset_sup->num_values)
charset = "us-ascii";
else
charset = "utf-8";
}
}
/*
* Then issue the print-job request...
*/
@@ -411,7 +478,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
request->request.op.request_id = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, "utf-8");
"attributes-charset", NULL, charset);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL,
@@ -439,120 +506,23 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
options = NULL;
num_options = cupsParseOptions(argv[5], 0, &options);
if (cupsGetOption("raw", num_options, options) ||
((content_type = getenv("CONTENT_TYPE")) != NULL &&
strcasecmp(content_type, "application/vnd.cups-raw") == 0))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else if ((val = cupsGetOption("document-format", num_options, options)) != NULL)
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, val);
else
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
if ((content_type = getenv("CONTENT_TYPE")) != NULL && format_sup != NULL)
{
for (i = 0; i < format_sup->num_values; i ++)
if (strcasecmp(content_type, format_sup->values[i].string.text) == 0)
break;
if (i < format_sup->num_values)
num_options = cupsAddOption("document-format", content_type,
num_options, &options);
}
cupsEncodeOptions(request, num_options, options);
cupsFreeOptions(num_options, options);
if (copies_sup)
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "copies", atoi(argv[4]));
for (i = 0; i < num_options; i ++)
{
/*
* Skip the "raw" option - handled above...
*/
if (strcasecmp(options[i].name, "raw") == 0 ||
strcasecmp(options[i].name, "document-format") == 0)
continue;
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, and option=MxN.
*/
option = options[i].name;
val = options[i].value;
if (*val == '\0')
val = NULL;
if (val != NULL)
{
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
n = 1;
val = "";
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
n = 0;
val = "";
}
n = strtol(val, &s, 0);
}
else
{
if (strncasecmp(option, "no", 2) == 0)
{
option += 2;
n = 0;
}
else
n = 1;
s = "";
}
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
/*
* String value(s)...
*/
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
else if (val != NULL)
{
/*
* Numeric value, range, or resolution...
*/
if (*s == '-')
{
n2 = strtol(s + 1, NULL, 0);
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
}
else if (*s == 'x')
{
n2 = strtol(s + 1, &s, 0);
if (strcasecmp(s, "dpc") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
else if (strcasecmp(s, "dpi") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
}
else
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
}
else
/*
* Boolean value...
*/
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
}
/*
* Now fill in the HTTP request stuff...
*/
@@ -699,6 +669,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
httpClose(http);
if (supported)
ippDelete(supported);
/*
* Close and remove the temporary file if necessary...
*/
+11 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Line Printer Daemon backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -91,6 +91,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
int format; /* Print format */
/*
* Make sure status messages are not buffered...
*/
setbuf(stderr, NULL);
/*
* Check command-line...
*/
if (argc == 1)
{
puts("network lpd \"Unknown\" \"LPD/LPR Host or Printer\"");
+56 -21
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Parallel port backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -97,6 +97,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
/*
* Make sure status messages are not buffered...
*/
setbuf(stderr, NULL);
/*
* Check command-line...
*/
if (argc == 1)
{
list_devices();
@@ -269,13 +279,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
void
list_devices(void)
{
#if defined(__hpux) || defined(__sgi) || defined(__sun)
static char *funky_hex = "0123456789abcdefghijklmnopqrstuvwxyz";
/* Funky hex numbering used for some devices */
#endif /* __hpux || __sgi || __sun */
#ifdef __linux
int i; /* Looping var */
int fd; /* File descriptor */
char device[255]; /* Device filename */
char device[255], /* Device filename */
probefile[255]; /* Probe filename */
FILE *probe; /* /proc/parport/n/autoprobe file */
char line[1024], /* Line from file */
*delim, /* Delimiter in file */
@@ -285,9 +298,41 @@ list_devices(void)
for (i = 0; i < 4; i ++)
{
sprintf(device, "/proc/parport/%d/autoprobe", i);
if ((probe = fopen(device, "r")) != NULL)
/*
* First open the device to make sure the driver module is loaded...
*/
sprintf(device, "/dev/lp%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
close(fd);
else
{
sprintf(device, "/dev/par%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
close(fd);
}
/*
* Then try looking at the probe file...
*/
sprintf(probefile, "/proc/parport/%d/autoprobe", i);
if ((probe = fopen(probefile, "r")) == NULL)
{
/*
* Linux 2.4 kernel has different path...
*/
sprintf(probefile, "/proc/sys/dev/parport/parport%d/autoprobe", i);
probe = fopen(probefile, "r");
}
if (probe != NULL)
{
/*
* Found a probe file!
*/
memset(make, 0, sizeof(make));
memset(model, 0, sizeof(model));
strcpy(model, "Unknown");
@@ -324,23 +369,13 @@ list_devices(void)
printf("direct parallel:/dev/lp%d \"%s\" \"Parallel Port #%d\"\n",
i, model, i + 1);
}
else
else if (fd >= 0)
{
sprintf(device, "/dev/lp%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
{
close(fd);
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
}
else
{
sprintf(device, "/dev/par%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
{
close(fd);
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
}
}
/*
* No probe file, but we know the port is there...
*/
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
}
}
#elif defined(__sgi)
@@ -540,7 +575,7 @@ list_devices(void)
printf("direct parallel:%s \"Unknown\" \"Parallel Port #%d\"\n", device, i + 1);
}
}
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
int i; /* Looping var */
int fd; /* File descriptor */
char device[255]; /* Device filename */
+158 -7
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Serial port backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -38,12 +38,19 @@
#include <cups/string.h>
#include <signal.h>
#ifdef __hpux
# include <sys/modem.h>
#endif /* __hpux */
#if defined(WIN32) || defined(__EMX__)
# include <io.h>
#else
# include <unistd.h>
# include <fcntl.h>
# include <termios.h>
# ifdef HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
# endif /* __linux */
#endif /* WIN32 || __EMX__ */
#ifdef __sgi
@@ -57,6 +64,14 @@
# endif /* !INV_EPP_ECP_PLP */
#endif /* __sgi */
#ifndef CRTSCTS
# ifdef CNEW_RTSCTS
# define CRTSCTS CNEW_RTSCTS
# else
# define CRTSCTS 0
# endif /* CNEW_RTSCTS */
#endif /* !CRTSCTS */
/*
* Local functions...
@@ -92,6 +107,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
int wbytes; /* Number of bytes written */
size_t nbytes, /* Number of bytes read */
tbytes; /* Total number of bytes written */
int dtrdsr; /* Do dtr/dsr flow control? */
int bufsize; /* Size of output buffer for writes */
char buffer[8192], /* Output buffer */
*bufptr; /* Pointer into buffer */
struct termios opts; /* Parallel port options */
@@ -100,6 +117,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
/*
* Make sure status messages are not buffered...
*/
setbuf(stderr, NULL);
/*
* Check command-line...
*/
if (argc == 1)
{
list_devices();
@@ -186,6 +213,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
opts.c_lflag &= ~(ICANON | ECHO | ISIG); /* Raw mode */
bufsize = 480; /* 9600 baud / 10 bits/char / 2Hz */
dtrdsr = 0; /* No dtr/dsr flow control */
if (options != NULL)
while (*options)
{
@@ -225,6 +255,8 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Set the baud rate...
*/
bufsize = atoi(value) / 20;
#if B19200 == 19200
cfsetispeed(&opts, atoi(value));
cfsetospeed(&opts, atoi(value));
@@ -255,6 +287,18 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
cfsetispeed(&opts, B38400);
cfsetospeed(&opts, B38400);
break;
#ifdef B57600
case 57600 :
cfsetispeed(&opts, B57600);
cfsetospeed(&opts, B57600);
break;
#endif /* B57600 */
#ifdef B115200
case 115200 :
cfsetispeed(&opts, B115200);
cfsetospeed(&opts, B115200);
break;
#endif /* B115200 */
default :
fprintf(stderr, "WARNING: Unsupported baud rate %s!\n", value);
break;
@@ -301,6 +345,36 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
else if (strcasecmp(value, "none") == 0)
opts.c_cflag &= ~PARENB;
}
else if (strcasecmp(name, "flow") == 0)
{
/*
* Set flow control...
*/
if (strcasecmp(value, "none") == 0)
{
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
opts.c_cflag &= ~CRTSCTS;
}
else if (strcasecmp(value, "soft") == 0)
{
opts.c_iflag |= IXON | IXOFF | IXANY;
opts.c_cflag &= ~CRTSCTS;
}
else if (strcasecmp(value, "hard") == 0 ||
strcasecmp(value, "rtscts") == 0)
{
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
opts.c_cflag |= CRTSCTS;
}
else if (strcasecmp(value, "dtrdsr") == 0)
{
opts.c_iflag &= ~(IXON | IXOFF | IXANY);
opts.c_cflag &= ~CRTSCTS;
dtrdsr = 1;
}
}
}
tcsetattr(fd, TCSANOW, &opts);
@@ -327,6 +401,9 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
* Finally, send the print file...
*/
if (bufsize > sizeof(buffer))
bufsize = sizeof(buffer);
while (copies > 0)
{
copies --;
@@ -337,8 +414,38 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
rewind(fp);
}
if (dtrdsr)
{
/*
* Check the port and sleep until DSR is set...
*/
int status;
if (!ioctl(fd, TIOCMGET, &status))
if (!(status & TIOCM_DSR))
{
/*
* Wait for DSR to go high...
*/
fputs("DEBUG: DSR is low; waiting for device...\n", stderr);
do
{
sleep(1);
if (ioctl(fd, TIOCMGET, &status))
break;
}
while (!(status & TIOCM_DSR));
fputs("DEBUG: DSR is high; writing to device...\n", stderr);
}
}
tbytes = 0;
while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
while ((nbytes = fread(buffer, 1, bufsize, fp)) > 0)
{
/*
* Write the print data to the printer...
@@ -387,8 +494,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
void
list_devices(void)
{
#if defined(__hpux) || defined(__sgi) || defined(__sun) || defined(__FreeBSD__) || defined(__OpenBSD__)
static char *funky_hex = "0123456789abcdefghijklmnopqrstuvwxyz";
/* Funky hex numbering used for some devices */
#endif /* __hpux || __sgi || __sun || __FreeBSD__ || __OpenBSD__ */
#ifdef __linux
int i; /* Looping var */
@@ -396,7 +505,7 @@ list_devices(void)
char device[255]; /* Device filename */
for (i = 0; i < 4; i ++)
for (i = 0; i < 100; i ++)
{
sprintf(device, "/dev/ttyS%d", i);
if ((fd = open(device, O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0)
@@ -433,7 +542,7 @@ list_devices(void)
*/
for (n = 0; n < 6; n ++)
printf("serial serial:/dev/ttyd%d?baud=19200 \"Unknown\" \"CDSIO Board %d Serial Port #%d\"\n",
printf("serial serial:/dev/ttyd%d?baud=38400 \"Unknown\" \"CDSIO Board %d Serial Port #%d\"\n",
n + 5 + 8 * inv->inv_controller, inv->inv_controller, n + 1);
}
else if (inv->inv_type == INV_EPC_SERIAL)
@@ -448,7 +557,7 @@ list_devices(void)
i = 41 + 4 * (int)inv->inv_controller;
for (n = 0; n < (int)inv->inv_state; n ++)
printf("serial serial:/dev/ttyd%d?baud=19200 \"Unknown\" \"EPC Serial Port %d, Ebus slot %d\"\n",
printf("serial serial:/dev/ttyd%d?baud=38400 \"Unknown\" \"EPC Serial Port %d, Ebus slot %d\"\n",
n + i, n + 1, (int)inv->inv_controller);
}
else if (inv->inv_state > 1)
@@ -458,7 +567,7 @@ list_devices(void)
*/
for (n = 0; n < (int)inv->inv_state; n ++)
printf("serial serial:/dev/ttyd%d?baud=19200 \"Unknown\" \"Onboard Serial Port %d\"\n",
printf("serial serial:/dev/ttyd%d?baud=38400 \"Unknown\" \"Onboard Serial Port %d\"\n",
n + (int)inv->inv_unit + 1, n + (int)inv->inv_unit + 1);
}
else
@@ -517,8 +626,13 @@ list_devices(void)
{
sprintf(device, "/dev/cua/%c", 'a' + i);
if (access(device, 0) == 0)
#ifdef B115200
printf("serial serial:%s?baud=115200 \"Unknown\" \"Serial Port #%d\"\n",
device, i + 1);
#else
printf("serial serial:%s?baud=38400 \"Unknown\" \"Serial Port #%d\"\n",
device, i + 1);
#endif /* B115200 */
}
/*
@@ -614,7 +728,7 @@ list_devices(void)
printf("serial serial:%s?baud=38400 \"Unknown\" \"Serial Port #%d\"\n",
device, i + 1);
}
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
#elif defined(__FreeBSD__) || defined(__OpenBSD__)
int i, j; /* Looping vars */
int fd; /* File descriptor */
char device[255]; /* Device filename */
@@ -696,6 +810,43 @@ list_devices(void)
device, i + 1);
}
}
#elif defined(__NetBSD__)
int i, j; /* Looping vars */
int fd; /* File descriptor */
char device[255]; /* Device filename */
/*
* Standard serial ports...
*/
for (i = 0; i < 4; i ++)
{
sprintf(device, "/dev/tty%02d", i);
if ((fd = open(device, O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0)
{
close(fd);
printf("serial serial:%s?baud=115200 \"Unknown\" \"Serial Port #%d\"\n",
device, i + 1);
}
}
/*
* Cyclades-Z ports...
*/
for (i = 0; i < 16; i ++) /* Should be up to 65536 boards... */
for (j = 0; j < 64; j ++)
{
sprintf(device, "/dev/ttyCZ%02d%02d", i, j);
if ((fd = open(device, O_WRONLY | O_NOCTTY | O_NDELAY)) >= 0)
{
close(fd);
printf("serial serial:%s?baud=115200 \"Unknown\" \"Cyclades #%d Serial Prt #%d\"\n",
device, i, j + 1);
}
}
#endif
}
+21 -7
Ver Arquivo
@@ -3,7 +3,7 @@
*
* AppSocket backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -69,6 +69,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
FILE *fp; /* Print file */
int copies; /* Number of copies to print */
int port; /* Port number */
int delay; /* Delay for retries... */
int fd; /* AppSocket */
int error; /* Error code (if any) */
struct sockaddr_in addr; /* Socket address */
@@ -85,6 +86,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
/*
* Make sure status messages are not buffered...
*/
setbuf(stderr, NULL);
/*
* Check command-line...
*/
if (argc == 1)
{
puts("network socket \"Unknown\" \"AppSocket/HP JetDirect\"");
@@ -137,7 +148,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if ((hostaddr = gethostbyname(hostname)) == NULL)
{
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s",
fprintf(stderr, "ERROR: Unable to locate printer \'%s\' - %s\n",
hostname, strerror(errno));
return (1);
}
@@ -152,7 +163,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
while (copies > 0)
{
for (;;)
for (delay = 5;;)
{
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
@@ -168,13 +179,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
if (error == ECONNREFUSED)
{
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in 30 seconds...\n",
hostname);
sleep(30);
fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in %d seconds...\n",
hostname, delay);
sleep(delay);
if (delay < 30)
delay += 5;
}
else
{
perror("ERROR: Unable to connect to printer");
perror("ERROR: Unable to connect to printer (retrying in 30 seconds)");
sleep(30);
}
}
+58 -6
Ver Arquivo
@@ -3,7 +3,7 @@
*
* USB port backend for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -86,6 +86,16 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
/*
* Make sure status messages are not buffered...
*/
setbuf(stderr, NULL);
/*
* Check command-line...
*/
if (argc == 1)
{
list_devices();
@@ -262,15 +272,35 @@ list_devices(void)
int i; /* Looping var */
int fd; /* File descriptor */
char device[255]; /* Device filename */
FILE *probe; /* /proc/parport/n/autoprobe file */
FILE *probe; /* /proc/bus/usb/devices file */
char line[1024], /* Line from file */
*delim, /* Delimiter in file */
make[IPP_MAX_NAME], /* Make from file */
model[IPP_MAX_NAME]; /* Model from file */
/*
* First try opening one of the USB devices to load the driver
* module as needed...
*/
if ((fd = open("/dev/usb/lp0", O_WRONLY)) >= 0)
close(fd); /* 2.3.x and 2.4.x */
else if ((fd = open("/dev/usb/usblp0", O_WRONLY)) >= 0)
close(fd); /* Mandrake 7.x */
else if ((fd = open("/dev/usblp0", O_WRONLY)) >= 0)
close(fd); /* 2.2.x */
/*
* Then look at the device list for the USB bus...
*/
if ((probe = fopen("/proc/bus/usb/devices", "r")) != NULL)
{
/*
* Scan the device list...
*/
i = 0;
memset(make, 0, sizeof(make));
@@ -305,15 +335,25 @@ list_devices(void)
strncpy(model, line + 12, sizeof(model) - 1);
}
else if (strncmp(line, "I:", 2) == 0 &&
strstr(line, "Driver=printer") != NULL &&
(strstr(line, "Driver=printer") != NULL ||
strstr(line, "Driver=usblp") != NULL) &&
make[0] && model[0])
{
/*
* We were processing a printer device; send the info out...
*/
printf("direct usb:/dev/usb/lp%d \"%s %s\" \"USB Printer #%d\"\n",
i, make, model, i + 1);
sprintf(device, "/dev/usb/lp%d", i);
if (access(device, 0))
{
sprintf(device, "/dev/usb/usblp%d", i);
if (access(device, 0))
sprintf(device, "/dev/usblp%d", i);
}
printf("direct usb:%s \"%s %s\" \"USB Printer #%d\"\n",
device, make, model, i + 1);
i ++;
@@ -326,6 +366,10 @@ list_devices(void)
}
else
{
/*
* Just probe manually for USB devices...
*/
for (i = 0; i < 8; i ++)
{
sprintf(device, "/dev/usb/lp%d", i);
@@ -335,6 +379,13 @@ list_devices(void)
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
}
sprintf(device, "/dev/usb/usblp%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
{
close(fd);
printf("direct usb:%s \"Unknown\" \"USB Printer #%d\"\n", device, i + 1);
}
sprintf(device, "/dev/usblp%d", i);
if ((fd = open(device, O_WRONLY)) >= 0)
{
@@ -347,11 +398,12 @@ list_devices(void)
#elif defined(__sun)
#elif defined(__hpux)
#elif defined(__osf)
#elif defined(FreeBSD) || defined(OpenBSD) || defined(NetBSD)
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
int i; /* Looping var */
int fd; /* File descriptor */
char device[255]; /* Device filename */
for (i = 0; i < 3; i ++)
{
sprintf(device, "/dev/ulpt%d", i);
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Berkeley commands makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
# Copyright 1997-2001 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
+25 -10
Ver Arquivo
@@ -3,7 +3,7 @@
*
* "lpc" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -216,7 +216,8 @@ show_status(http_t *http, /* I - HTTP connection to server */
ipp_t *request, /* IPP Request */
*response, /* IPP Response */
*jobs; /* IPP Get Jobs response */
ipp_attribute_t *attr; /* Current attribute */
ipp_attribute_t *attr, /* Current attribute */
*jattr; /* Current job attribute */
cups_lang_t *language; /* Default language */
char *printer, /* Printer name */
*device; /* Device URI */
@@ -228,6 +229,13 @@ show_status(http_t *http, /* I - HTTP connection to server */
int match; /* Non-zero if this job matches */
char printer_uri[HTTP_MAX_URI];
/* Printer URI */
static const char *requested[] =
{ /* Requested attributes */
"printer-name",
"device-uri",
"printer-state",
"printer-is-accepting-jobs"
};
DEBUG_printf(("show_status(%08x, %08x)\n", http, dests));
@@ -250,11 +258,15 @@ show_status(http_t *http, /* I - HTTP connection to server */
language = cupsLangDefault();
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", sizeof(requested) / sizeof(requested[0]),
NULL, requested);
/*
* Do the request and get back a response...
@@ -412,13 +424,16 @@ show_status(http_t *http, /* I - HTTP connection to server */
snprintf(printer_uri, sizeof(printer_uri),
"ipp://localhost/printers/%s", printer);
attr = ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, printer_uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, printer_uri);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "job-id");
if ((jobs = cupsDoRequest(http, request, "/jobs/")) != NULL)
{
for (attr = jobs->attrs; attr != NULL; attr = attr->next)
if (strcmp(attr->name, "job-id") == 0)
for (jattr = jobs->attrs; jattr != NULL; jattr = jattr->next)
if (jattr->name && strcmp(jattr->name, "job-id") == 0)
jobcount ++;
ippDelete(jobs);
+43 -9
Ver Arquivo
@@ -3,7 +3,7 @@
*
* "lpq" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -39,6 +39,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <config.h>
#include <cups/cups.h>
#include <cups/language.h>
#include <cups/debug.h>
@@ -65,26 +66,41 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* Connection to server */
const char *dest, /* Desired printer */
*user; /* Desired user */
char *instance; /* Printer instance */
int id, /* Desired job ID */
interval, /* Reporting interval */
longstatus; /* Show file details */
int num_dests; /* Number of destinations */
cups_dest_t *dests; /* Destinations */
http_encryption_t encryption; /* Encryption? */
/*
* Connect to the scheduler...
*/
http = httpConnect(cupsServer(), ippPort());
if ((http = httpConnect(cupsServer(), ippPort())) == NULL)
{
fputs("lpq: Unable to contact server!\n", stderr);
return (1);
}
/*
* Check for command-line options...
*/
dest = cupsGetDefault();
dest = NULL;
user = NULL;
id = 0;
interval = 0;
longstatus = 0;
num_dests = cupsGetDests(&dests);
for (i = 0; i < num_dests; i ++)
if (dests[i].is_default)
dest = dests[i].name;
for (i = 1; i < argc; i ++)
if (argv[i][0] == '+')
interval = atoi(argv[i] + 1);
@@ -92,6 +108,18 @@ main(int argc, /* I - Number of command-line arguments */
{
switch (argv[i][1])
{
case 'E' : /* Encrypt */
#ifdef HAVE_LIBSSL
encryption = HTTP_ENCRYPT_REQUIRED;
if (http)
httpEncryption(http, encryption);
#else
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
argv[0]);
#endif /* HAVE_LIBSSL */
break;
case 'P' : /* Printer */
if (argv[i][2])
dest = argv[i] + 2;
@@ -100,6 +128,9 @@ main(int argc, /* I - Number of command-line arguments */
i ++;
dest = argv[i];
}
if ((instance = strchr(dest, '/')) != NULL)
*instance = '\0';
break;
case 'l' : /* Long status */
@@ -108,6 +139,8 @@ main(int argc, /* I - Number of command-line arguments */
default :
fputs("Usage: lpq [-P dest] [-l] [+interval]\n", stderr);
httpClose(http);
cupsFreeDests(num_dests, dests);
return (1);
}
}
@@ -140,6 +173,7 @@ main(int argc, /* I - Number of command-line arguments */
* Close the connection to the server and return...
*/
cupsFreeDests(num_dests, dests);
httpClose(http);
return (0);
@@ -349,7 +383,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
#ifdef __osf__
puts("Rank Owner Pri Job Files Total Size");
#else
puts("Rank Owner Job Files Total Size");
puts("Rank Owner Job File(s) Total Size");
#endif /* __osf__ */
jobcount ++;
@@ -362,7 +396,7 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
strcpy(rankstr, "active");
else
{
sprintf(rankstr, "%d%s", rank, ranks[rank % 10]);
snprintf(rankstr, sizeof(rankstr), "%d%s", rank, ranks[rank % 10]);
rank ++;
}
@@ -379,15 +413,15 @@ show_jobs(http_t *http, /* I - HTTP connection to server */
namestr[sizeof(namestr) - 1] = '\0';
}
printf("%s: %-31s [job %d localhost]\n", jobuser, rankstr, jobid);
printf(" %-31.31s %d bytes\n", namestr, jobsize);
printf("%s: %-34.34s[job %d localhost]\n", jobuser, rankstr, jobid);
printf(" %-40.40s%d bytes\n", namestr, jobsize);
}
else
#ifdef __osf__
printf("%-6s %-10.10s %-4d %-10d %-27.27s %d bytes\n", rankstr, jobuser,
jobpriority, jobid, jobname, jobsize);
#else
printf("%-6s %-10.10s %-15d %-27.27s %d bytes\n", rankstr, jobuser,
printf("%-7s %-8.8s%-8d%-32.32s%d bytes\n", rankstr, jobuser,
jobid, jobname, jobsize);
#endif /* __osf */
@@ -452,7 +486,7 @@ show_printer(http_t *http, /* I - HTTP connection to server */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
sprintf(uri, "ipp://localhost/printers/%s", dest);
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s", dest);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
+17 -3
Ver Arquivo
@@ -3,7 +3,7 @@
*
* "lpr" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -33,6 +33,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <config.h>
#include <cups/cups.h>
@@ -97,6 +99,15 @@ main(int argc, /* I - Number of command-line arguments */
if (argv[i][0] == '-')
switch (argv[i][1])
{
case 'E' : /* Encrypt */
#ifdef HAVE_LIBSSL
cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
#else
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
argv[0]);
#endif /* HAVE_LIBSSL */
break;
case 'i' : /* indent */
case 'w' : /* width */
if (argv[i][2] == '\0')
@@ -123,14 +134,17 @@ main(int argc, /* I - Number of command-line arguments */
break;
case 'l' : /* Literal/raw */
num_options = cupsParseOptions("raw", num_options, &options);
num_options = cupsAddOption("raw", "", num_options, &options);
break;
case 'p' : /* Prettyprint */
num_options = cupsParseOptions("prettyprint", num_options, &options);
num_options = cupsAddOption("prettyprint", "", num_options, &options);
break;
case 'h' : /* Suppress burst page */
num_options = cupsAddOption("job-sheets", "none", num_options, &options);
break;
case 's' : /* Don't use symlinks */
break;
+43 -6
Ver Arquivo
@@ -3,7 +3,7 @@
*
* "lprm" command for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -50,22 +50,33 @@ main(int argc, /* I - Number of command-line arguments */
int i; /* Looping var */
int job_id; /* Job ID */
const char *dest; /* Destination printer */
char *instance; /* Pointer to instance name */
char uri[1024]; /* Printer or job URI */
ipp_t *request; /* IPP request */
ipp_t *response; /* IPP response */
ipp_op_t op; /* Operation */
cups_lang_t *language; /* Language */
int num_dests; /* Number of destinations */
cups_dest_t *dests; /* Destinations */
http_encryption_t encryption; /* Encryption? */
/*
* Setup to cancel individual print jobs...
*/
op = IPP_CANCEL_JOB;
job_id = 0;
dest = cupsGetDefault();
response = NULL;
http = NULL;
op = IPP_CANCEL_JOB;
job_id = 0;
dest = NULL;
response = NULL;
http = NULL;
encryption = cupsEncryption();
num_dests = cupsGetDests(&dests);
for (i = 0; i < num_dests; i ++)
if (dests[i].is_default)
dest = dests[i].name;
/*
* Open a connection to the server...
@@ -74,9 +85,12 @@ main(int argc, /* I - Number of command-line arguments */
if ((http = httpConnect(cupsServer(), ippPort())) == NULL)
{
fputs("lprm: Unable to contact server!\n", stderr);
cupsFreeDests(num_dests, dests);
return (1);
}
httpEncryption(http, encryption);
/*
* Process command-line arguments...
*/
@@ -85,6 +99,17 @@ main(int argc, /* I - Number of command-line arguments */
if (argv[i][0] == '-' && argv[i][1] != '\0')
switch (argv[i][1])
{
case 'E' : /* Encrypt */
#ifdef HAVE_LIBSSL
encryption = HTTP_ENCRYPT_REQUIRED;
httpEncryption(http, encryption);
#else
fprintf(stderr, "%s: Sorry, no encryption support compiled in!\n",
argv[0]);
#endif /* HAVE_LIBSSL */
break;
case 'P' : /* Cancel jobs on a printer */
if (argv[i][2])
dest = argv[i] + 2;
@@ -93,10 +118,15 @@ main(int argc, /* I - Number of command-line arguments */
i ++;
dest = argv[i];
}
if ((instance = strchr(dest, '/')) != NULL)
*instance = '\0';
break;
default :
fprintf(stderr, "lprm: Unknown option \'%c\'!\n", argv[i][1]);
cupsFreeDests(num_dests, dests);
httpClose(http);
return (1);
}
else
@@ -196,6 +226,8 @@ main(int argc, /* I - Number of command-line arguments */
else
{
fputs("lprm: Unable to cancel job(s)!\n", stderr);
cupsFreeDests(num_dests, dests);
httpClose(http);
return (1);
}
}
@@ -209,9 +241,14 @@ main(int argc, /* I - Number of command-line arguments */
if (!cupsCancelJob(dest, 0))
{
fputs("lprm: Unable to cancel job(s)!\n", stderr);
cupsFreeDests(num_dests, dests);
httpClose(http);
return (1);
}
cupsFreeDests(num_dests, dests);
httpClose(http);
return (0);
}
+144 -50
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Administration CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -263,9 +263,12 @@ do_am_class(http_t *http, /* I - HTTP connection */
}
name = cgiGetVariable("PRINTER_NAME");
for (ptr = name; *ptr; ptr ++)
if (!isalnum(*ptr) && *ptr != '_')
break;
if (isdigit(*name))
ptr = name;
else
for (ptr = name; *ptr; ptr ++)
if (!isalnum(*ptr) && *ptr != '_')
break;
if (*ptr || ptr == name)
{
@@ -483,7 +486,8 @@ do_am_printer(http_t *http, /* I - HTTP connection */
ipp_attribute_t *attr, /* Current attribute */
*last; /* Last attribute */
ipp_t *request, /* IPP request */
*response; /* IPP response */
*response, /* IPP response */
*oldinfo; /* Old printer information */
ipp_status_t status; /* Request status */
const char *var; /* CGI variable */
char uri[HTTP_MAX_URI], /* Device or printer URI */
@@ -507,49 +511,53 @@ do_am_printer(http_t *http, /* I - HTTP connection */
};
if (cgiGetVariable("PRINTER_LOCATION") == NULL)
if (modify)
{
/*
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the
* following attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
request->request.op.request_id = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s",
cgiGetVariable("PRINTER_NAME"));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
/*
* Do the request and get back a response...
*/
oldinfo = cupsDoRequest(http, request, "/");
}
else
oldinfo = NULL;
if ((name = cgiGetVariable("PRINTER_NAME")) == NULL)
{
if (modify)
{
/*
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the
* following attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
request->request.op.request_id = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
snprintf(uri, sizeof(uri), "ipp://localhost/printers/%s",
cgiGetVariable("PRINTER_NAME"));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
ippSetCGIVars(response, NULL, NULL);
ippDelete(response);
}
/*
* Update the location and description of an existing printer...
*/
if (oldinfo)
ippSetCGIVars(oldinfo, NULL, NULL);
cgiCopyTemplateLang(stdout, TEMPLATES, "modify-printer.tmpl", getenv("LANG"));
}
else
@@ -561,13 +569,18 @@ do_am_printer(http_t *http, /* I - HTTP connection */
cgiCopyTemplateLang(stdout, TEMPLATES, "add-printer.tmpl", getenv("LANG"));
}
if (oldinfo)
ippDelete(oldinfo);
return;
}
name = cgiGetVariable("PRINTER_NAME");
for (ptr = name; *ptr; ptr ++)
if (!isalnum(*ptr) && *ptr != '_')
break;
if (isdigit(*name))
ptr = name;
else
for (ptr = name; *ptr; ptr ++)
if (!isalnum(*ptr) && *ptr != '_')
break;
if (*ptr || ptr == name)
{
@@ -616,10 +629,32 @@ do_am_printer(http_t *http, /* I - HTTP connection */
* Let the user choose...
*/
if (oldinfo &&
(attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL)
{
strncpy(uri, attr->values[0].string.text, sizeof(uri) - 1);
uri[sizeof(uri) - 1] = '\0';
if ((uriptr = strchr(uri, ':')) != NULL && strncmp(uriptr, "://", 3) == 0)
*uriptr = '\0';
cgiSetVariable("CURRENT_DEVICE_URI", uri);
}
cgiCopyTemplateLang(stdout, TEMPLATES, "choose-device.tmpl", getenv("LANG"));
}
else if (strchr(var, '/') == NULL)
{
if (oldinfo &&
(attr = ippFindAttribute(oldinfo, "device-uri", IPP_TAG_URI)) != NULL)
{
/*
* Set the current device URI for the form to the old one...
*/
if (strncmp(attr->values[0].string.text, var, strlen(var)) == 0)
cgiSetVariable("DEVICE_URI", attr->values[0].string.text);
}
/*
* User needs to set the full URI...
*/
@@ -651,6 +686,50 @@ do_am_printer(http_t *http, /* I - HTTP connection */
}
else if ((var = cgiGetVariable("PPD_NAME")) == NULL)
{
if (modify)
{
/*
* Get the PPD file...
*/
FILE *fp; /* PPD file */
char filename[1024]; /* PPD filename */
ppd_file_t *ppd; /* PPD information */
char buffer[1024]; /* Buffer */
int bytes; /* Number of bytes */
snprintf(uri, sizeof(uri), "/printers/%s.ppd", name);
cupsTempFile(filename, sizeof(filename));
if (httpGet(http, uri))
httpGet(http, uri);
while (httpUpdate(http) == HTTP_CONTINUE);
if ((fp = fopen(filename, "w")) != NULL)
{
while ((bytes = httpRead(http, buffer, sizeof(buffer))) > 0)
fwrite(buffer, 1, bytes, fp);
fclose(fp);
if ((ppd = ppdOpenFile(filename)) != NULL)
{
if (ppd->manufacturer)
cgiSetVariable("CURRENT_MAKE", ppd->manufacturer);
if (ppd->nickname)
cgiSetVariable("CURRENT_MAKE_AND_MODEL", ppd->nickname);
ppdClose(ppd);
}
}
else
httpFlush(http);
unlink(filename);
}
/*
* Build a CUPS_GET_PPDS request, which requires the following
* attributes:
@@ -715,7 +794,16 @@ do_am_printer(http_t *http, /* I - HTTP connection */
ippDelete(response);
}
else
{
char message[1024];
snprintf(message, sizeof(message), "Unable to get list of printer drivers: %s",
ippErrorString(cupsLastError()));
cgiSetVariable("ERROR", message);
cgiCopyTemplateLang(stdout, TEMPLATES, "error.tmpl", getenv("LANG"));
}
}
else
{
@@ -759,7 +847,8 @@ do_am_printer(http_t *http, /* I - HTTP connection */
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name",
NULL, cgiGetVariable("PPD_NAME"));
strcpy(uri, cgiGetVariable("DEVICE_URI"));
strncpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri) - 1);
uri[sizeof(uri) - 1] = '\0';
if (strncmp(uri, "serial:", 7) == 0)
{
/*
@@ -769,9 +858,10 @@ do_am_printer(http_t *http, /* I - HTTP connection */
if ((uriptr = strchr(uri, '?')) == NULL)
uriptr = uri + strlen(uri);
sprintf(uriptr, "?baud=%s+bits=%s+parity=%s+flow=%s",
cgiGetVariable("BAUDRATE"), cgiGetVariable("BITS"),
cgiGetVariable("PARITY"), cgiGetVariable("FLOW"));
snprintf(uriptr, sizeof(uri) - (uriptr - uri),
"?baud=%s+bits=%s+parity=%s+flow=%s",
cgiGetVariable("BAUDRATE"), cgiGetVariable("BITS"),
cgiGetVariable("PARITY"), cgiGetVariable("FLOW"));
}
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_URI, "device-uri",
@@ -804,6 +894,9 @@ do_am_printer(http_t *http, /* I - HTTP connection */
else
cgiCopyTemplateLang(stdout, TEMPLATES, "printer-added.tmpl", getenv("LANG"));
}
if (oldinfo)
ippDelete(oldinfo);
}
@@ -1035,7 +1128,8 @@ do_config_printer(http_t *http, /* I - HTTP connection */
* Get default option name...
*/
strcpy(keyword, line + 8);
strncpy(keyword, line + 8, sizeof(keyword) - 1);
keyword[sizeof(keyword) - 1] = '\0';
for (keyptr = keyword; *keyptr; keyptr ++)
if (*keyptr == ':' || isspace(*keyptr))
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* CGI support library definitions.
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* 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
+60 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Class status CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -46,6 +46,7 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* Connection to the server */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* IPP attribute */
ipp_status_t status; /* Operation status... */
char uri[HTTP_MAX_URI];
/* Printer URI */
@@ -98,6 +99,64 @@ main(int argc, /* I - Number of command-line arguments */
if (op == NULL || strcasecmp(op, "print-test-page") != 0)
{
/*
* Get the default destination...
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_DEFAULT;
request->request.op.request_id = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
cgiSetVariable("DEFAULT_NAME", attr->values[0].string.text);
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
{
char method[HTTP_MAX_URI],
username[HTTP_MAX_URI],
hostname[HTTP_MAX_URI],
resource[HTTP_MAX_URI],
uri[HTTP_MAX_URI];
int port; /* URI data */
const char *server; /* Name of server */
/*
* Map localhost access to localhost...
*/
server = getenv("SERVER_NAME");
httpSeparate(attr->values[0].string.text, method, username,
hostname, &port, resource);
if (strcasecmp(hostname, server) == 0 &&
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
strcmp(getenv("REMOTE_HOST"), server) == 0))
strcpy(hostname, "localhost");
/*
* Rewrite URI with HTTP address...
*/
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
resource);
cgiSetVariable("DEFAULT_URI", uri);
}
ippDelete(response);
}
/*
* Get the class info...
*/
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* CGI HTML functions.
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* 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
+34 -5
Ver Arquivo
@@ -3,7 +3,7 @@
*
* IPP variable routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -23,6 +23,7 @@
*
* Contents:
*
* ippGetTemplateDir() - Get the templates directory...
* ippSetServerVersion() - Set the server name and CUPS version...
* ippSetCGIVars() - Set CGI variables from an IPP response.
*/
@@ -96,12 +97,13 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
resource[HTTP_MAX_URI],
uri[HTTP_MAX_URI];
int port; /* URI data */
char server[1024]; /* Name of server */
const char *server; /* Name of server */
struct tm *date; /* Date information */
ippSetServerVersion();
strcpy(server, cupsServer());
server = getenv("SERVER_NAME");
for (attr = response->attrs;
attr && attr->group_tag == IPP_TAG_OPERATION;
@@ -119,6 +121,10 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
filter != NULL && filter->group_tag != IPP_TAG_ZERO;
filter = filter->next)
if (filter->name && strcmp(filter->name, filter_name) == 0 &&
(filter->value_tag == IPP_TAG_STRING ||
(filter->value_tag >= IPP_TAG_TEXTLANG &&
filter->value_tag <= IPP_TAG_MIMETYPE)) &&
filter->values[0].string.text != NULL &&
strcasecmp(filter->values[0].string.text, filter_value) == 0)
break;
@@ -150,6 +156,21 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
name[i] = '\0';
/*
* Add "job_printer_name" variable if we have a "job_printer_uri"
* attribute...
*/
if (strcmp(name, "job_printer_uri") == 0)
{
if ((valptr = strrchr(attr->values[0].string.text, '/')) == NULL)
valptr = "unknown";
else
valptr ++;
cgiSetArray("job_printer_name", element, valptr);
}
/*
* Copy values...
*/
@@ -168,7 +189,14 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
{
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
sprintf(valptr, "%d", attr->values[i].integer);
if (strncmp(name, "time_at_", 8) == 0)
{
date = localtime((time_t *)&(attr->values[i].integer));
strftime(valptr, sizeof(value) - (valptr - value) - 1,
NULL, date);
}
else
sprintf(valptr, "%d", attr->values[i].integer);
break;
case IPP_TAG_BOOLEAN :
@@ -206,7 +234,8 @@ ippSetCGIVars(ipp_t *response, /* I - Response data to be copied... */
if (strcasecmp(hostname, server) == 0 &&
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0))
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
strcmp(getenv("REMOTE_HOST"), server) == 0))
strcpy(hostname, "localhost");
/*
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* IPP variable definitions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Job status CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+60 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Printer status CGI for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -46,6 +46,7 @@ main(int argc, /* I - Number of command-line arguments */
http_t *http; /* Connection to the server */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* IPP attribute */
ipp_status_t status; /* Operation status... */
char uri[HTTP_MAX_URI];
/* Printer URI */
@@ -98,6 +99,64 @@ main(int argc, /* I - Number of command-line arguments */
if (op == NULL || strcasecmp(op, "print-test-page") != 0)
{
/*
* Get the default destination...
*/
request = ippNew();
request->request.op.operation_id = CUPS_GET_DEFAULT;
request->request.op.request_id = 1;
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
if ((response = cupsDoRequest(http, request, "/")) != NULL)
{
if ((attr = ippFindAttribute(response, "printer-name", IPP_TAG_NAME)) != NULL)
cgiSetVariable("DEFAULT_NAME", attr->values[0].string.text);
if ((attr = ippFindAttribute(response, "printer-uri-supported", IPP_TAG_URI)) != NULL)
{
char method[HTTP_MAX_URI],
username[HTTP_MAX_URI],
hostname[HTTP_MAX_URI],
resource[HTTP_MAX_URI],
uri[HTTP_MAX_URI];
int port; /* URI data */
const char *server; /* Name of server */
/*
* Map localhost access to localhost...
*/
server = getenv("SERVER_NAME");
httpSeparate(attr->values[0].string.text, method, username,
hostname, &port, resource);
if (strcasecmp(hostname, server) == 0 &&
(strcmp(getenv("REMOTE_HOST"), "127.0.0.1") == 0 ||
strcmp(getenv("REMOTE_HOST"), "localhost") == 0 ||
strcmp(getenv("REMOTE_HOST"), server) == 0))
strcpy(hostname, "localhost");
/*
* Rewrite URI with HTTP address...
*/
snprintf(uri, sizeof(uri), "http://%s:%d%s", hostname, port,
resource);
cgiSetVariable("DEFAULT_URI", uri);
}
ippDelete(response);
}
/*
* Get the printer info...
*/
+65 -21
Ver Arquivo
@@ -3,7 +3,7 @@
*
* CGI template function.
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* 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
@@ -110,14 +110,14 @@ cgiCopyTemplateLang(FILE *out, /* I - Output file */
* See if we have a template file for this language...
*/
sprintf(filename, "%s/%s/%s", directory, locale, tmpl);
snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl);
if (access(filename, 0))
{
locale[2] = '\0';
sprintf(filename, "%s/%s/%s", directory, locale, tmpl);
snprintf(filename, sizeof(filename), "%s/%s/%s", directory, locale, tmpl);
if (access(filename, 0))
sprintf(filename, "%s/%s", directory, tmpl);
snprintf(filename, sizeof(filename), "%s/%s", directory, tmpl);
}
/*
@@ -160,7 +160,8 @@ cgi_copy(FILE *out, /* I - Output file */
*s; /* String pointer */
const char *value; /* Value of variable */
const char *innerval; /* Inner value */
char outval[1024], /* Output string */
const char *outptr; /* Output string pointer */
char outval[1024], /* Formatted output string */
compare[1024]; /* Comparison string */
int result; /* Result of comparison */
@@ -179,7 +180,7 @@ cgi_copy(FILE *out, /* I - Output file */
*/
for (s = name; (ch = getc(in)) != EOF;)
if (strchr("}]<>=!", ch))
if (strchr("}]<>=! \t\n", ch))
break;
else if (s > name && ch == '?')
break;
@@ -188,6 +189,17 @@ cgi_copy(FILE *out, /* I - Output file */
*s = '\0';
if (s == name && isspace(ch))
{
if (out)
{
putc('{', out);
putc(ch, out);
}
continue;
}
/*
* See if it has a value...
*/
@@ -203,14 +215,20 @@ cgi_copy(FILE *out, /* I - Output file */
*nameptr++ = '\0';
if ((value = cgiGetArray(name + 1, atoi(nameptr) - 1)) != NULL)
strcpy(outval, value);
outptr = value;
else
{
outval[0] = '\0';
outptr = outval;
}
}
if ((value = cgiGetArray(name + 1, element)) != NULL)
strcpy(outval, value);
outptr = value;
else
{
outval[0] = '\0';
outptr = outval;
}
}
else if (name[0] == '#')
{
@@ -222,6 +240,8 @@ cgi_copy(FILE *out, /* I - Output file */
sprintf(outval, "%d", cgiGetSize(name + 1));
else
sprintf(outval, "%d", element + 1);
outptr = outval;
}
else if (name[0] == '[')
{
@@ -264,14 +284,20 @@ cgi_copy(FILE *out, /* I - Output file */
{
*nameptr++ = '\0';
if ((value = cgiGetArray(name, atoi(nameptr) - 1)) == NULL)
sprintf(outval, "{%s}", name);
{
snprintf(outval, sizeof(outval), "{%s}", name);
outptr = outval;
}
else
strcpy(outval, value);
outptr = value;
}
else if ((value = cgiGetArray(name, element)) == NULL)
sprintf(outval, "{%s}", name);
{
snprintf(outval, sizeof(outval), "{%s}", name);
outptr = outval;
}
else
strcpy(outval, value);
outptr = value;
}
/*
@@ -285,7 +311,7 @@ cgi_copy(FILE *out, /* I - Output file */
*/
if (out)
cgi_puts(outval, out);
cgi_puts(outptr, out);
continue;
}
@@ -319,6 +345,8 @@ cgi_copy(FILE *out, /* I - Output file */
for (s = compare; (ch = getc(in)) != EOF;)
if (ch == '?')
break;
else if (s >= (compare + sizeof(compare) - 1))
continue;
else if (ch == '#')
{
sprintf(s, "%d", element + 1);
@@ -345,19 +373,28 @@ cgi_copy(FILE *out, /* I - Output file */
if ((innerval = cgiGetArray(innername, atoi(innerptr) - 1)) == NULL)
*s = '\0';
else
strcpy(s, innerval);
{
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
compare[sizeof(compare) - 1] = '\0';
}
}
else if (innername[0] == '?')
{
if ((innerval = cgiGetArray(innername + 1, element)) == NULL)
*s = '\0';
else
strcpy(s, innerval);
{
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
compare[sizeof(compare) - 1] = '\0';
}
}
else if ((innerval = cgiGetArray(innername, element)) == NULL)
sprintf(s, "{%s}", innername);
snprintf(s, sizeof(s), "{%s}", innername);
else
strcpy(s, innerval);
{
strncpy(s, innerval, sizeof(compare) - (s - compare) - 1);
compare[sizeof(compare) - 1] = '\0';
}
s += strlen(s);
}
@@ -378,16 +415,16 @@ cgi_copy(FILE *out, /* I - Output file */
switch (op)
{
case '<' :
result = strcasecmp(outval, compare) < 0;
result = strcasecmp(outptr, compare) < 0;
break;
case '>' :
result = strcasecmp(outval, compare) > 0;
result = strcasecmp(outptr, compare) > 0;
break;
case '=' :
result = strcasecmp(outval, compare) == 0;
result = strcasecmp(outptr, compare) == 0;
break;
case '!' :
result = strcasecmp(outval, compare) != 0;
result = strcasecmp(outptr, compare) != 0;
break;
default :
result = 1;
@@ -423,6 +460,13 @@ cgi_copy(FILE *out, /* I - Output file */
}
else if (out)
putc(ch, out);
/*
* Flush any pending output...
*/
if (out)
fflush(out);
}
+23 -13
Ver Arquivo
@@ -3,7 +3,7 @@
*
* CGI form variable and array functions.
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* 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
@@ -39,6 +39,8 @@
/*#define DEBUG*/
#include "cgi.h"
#include <errno.h>
#include <syslog.h>
/*
@@ -489,10 +491,11 @@ cgi_initialize_post(void)
for (tbytes = 0; tbytes < length; tbytes += nbytes)
if ((nbytes = read(0, data + tbytes, length - tbytes)) < 0)
{
free(data);
return (0);
}
if (errno != EAGAIN)
{
free(data);
return (0);
}
data[length] = '\0';
@@ -543,11 +546,11 @@ cgi_initialize_string(const char *data) /* I - Form data string */
* Get the variable name...
*/
for (s = name; *data != '\0'; data ++, s ++)
for (s = name; *data != '\0'; data ++)
if (*data == '=')
break;
else
*s = *data;
else if (*data >= ' ')
*s++ = *data;
*s = '\0';
if (*data == '=')
@@ -590,7 +593,10 @@ cgi_initialize_string(const char *data) /* I - Form data string */
break;
default : /* Other characters come straight through */
*s = *data;
if (*data < ' ')
s --;
else
*s = *data;
break;
}
@@ -600,7 +606,9 @@ cgi_initialize_string(const char *data) /* I - Form data string */
* Remove trailing whitespace...
*/
s --;
if (s > value)
s --;
while (s >= value && *s == ' ')
*s-- = '\0';
@@ -611,7 +619,8 @@ cgi_initialize_string(const char *data) /* I - Form data string */
if ((s = strrchr(name, '-')) != NULL && isdigit(s[1]))
{
*s++ = '\0';
cgiSetArray(name, atoi(s) - 1, value);
if (value[0])
cgiSetArray(name, atoi(s) - 1, value);
}
else if (cgiGetVariable(name) != NULL)
cgiSetArray(name, cgiGetSize(name), value);
@@ -644,9 +653,10 @@ cgi_sort_variables(void)
(int (*)(const void *, const void *))cgi_compare_variables);
#ifdef DEBUG
puts("New variable list is:");
puts("Sorted variable list is:");
for (i = 0; i < form_count; i ++)
printf("%s = %s\n", form_vars[i].name, form_vars[i].value);
printf("%d: %s (%d) = \"%s\" ...\n", i, form_vars[i].name,
form_vars[i].nvalues, form_vars[i].values[0]);
#endif /* DEBUG */
}
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Configuration file makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1993-2000 by Easy Software Products.
# Copyright 1993-2001 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
+22 -7
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: client.conf 969 2000-03-10 16:56:46Z mike $"
# "$Id: client.conf 1485 2000-12-20 13:41:17Z mike $"
#
# Sample client configuration file for the Common UNIX Printing System
# (CUPS).
@@ -27,24 +27,39 @@
# #
# This is the CUPS client configuration file. This file is used to #
# define client-specific parameters, such as the default server or #
# default printer. #
# default encryption settings. #
# #
########################################################################
#
# ServerName: the hostname of your server. By default CUPS will use the
# hostname of the system.
# hostname of the system or the value of the CUPS_SERVER environment
# variable.
#
#ServerName myhost.domain.com
#
# DefaultPrinter: the default printer (or class) that clients should use.
# Encryption: whether or not to use encryption; this depends on having
# the OpenSSL library linked into the CUPS library.
#
# Possible values:
#
# Always - Always use encryption (SSL)
# Never - Never use encryption
# Required - Use TLS encryption upgrade
# IfRequested - Use encryption if the server requests it
#
# The default value is "IfRequested". This parameter can also be set
# using the CUPS_ENCRYPTION environment variable.
#
#DefaultPrinter myprinter
#DefaultPrinter myprinter@host
#Encryption Always
#Encryption Never
#Encryption Required
#Encryption IfRequested
#
# End of "$Id: client.conf 969 2000-03-10 16:56:46Z mike $".
# End of "$Id: client.conf 1485 2000-12-20 13:41:17Z mike $".
#
+107 -21
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: cupsd.conf 1171 2000-06-27 21:15:41Z mike $"
# "$Id: cupsd.conf 1485 2000-12-20 13:41:17Z mike $"
#
# Sample configuration file for the Common UNIX Printing System (CUPS)
# scheduler.
@@ -111,11 +111,19 @@
#ErrorLog /var/log/cups/error_log
#
# FontPath: the path to locate all font files (currently only for pstoraster)
# By default /usr/share/cups/fonts.
#
#FontPath /usr/share/cups/fonts
#
# LogLevel: controls the number of messages logged to the ErrorLog
# file and can be one of the following:
#
# debug Log everything.
# debug2 Log everything.
# debug Log almost everything.
# info Log all requests and state changes.
# warn Log errors and warnings.
# error Log only errors.
@@ -157,7 +165,21 @@ LogLevel info
#PreserveJobFiles No
#
# Printcap: the name of the printcap file. Default is no filename.
# AutoPurgeJobs: automatically purge jobs when not needed for quotas.
# Default is No.
#
#AutoPurgeJobs No
#
# MaxJobs: maximum number of jobs to keep in memory (active and completed.)
# Default is 0 (no limit.)
#
#MaxJobs 0
#
# Printcap: the name of the printcap file. Default is /etc/printcap.
# Leave blank to disable printcap file generation.
#
@@ -170,6 +192,13 @@ LogLevel info
#RequestRoot /var/spool/cups
#
# RemoteRoot: the name of the user assigned to unauthenticated accesses
# from remote systems. By default "remroot".
#
#RemoteRoot remroot
#
# ServerBin: the root directory for the scheduler executables.
# By default /usr/lib/cups or /usr/lib32/cups (IRIX 6.5).
@@ -185,6 +214,25 @@ LogLevel info
#ServerRoot /etc/cups
########
######## Encryption Support
########
#
# ServerCertificate: the file to read containing the server's certificate.
# Defaults to "/etc/cups/ssl/server.crt".
#
#ServerCertificate /etc/cups/ssl/server.crt
#
# ServerKey: the file to read containing the server's key.
# Defaults to "/etc/cups/ssl/server.key".
#
#ServerKey /etc/cups/ssl/server.key
########
######## Filter Options
########
@@ -213,12 +261,22 @@ LogLevel info
#
# TempDir: the directory to put temporary files in. This directory must be
# writable by the user defined above! Defaults to "/var/tmp" or the value
# of the TMPDIR environment variable.
# writable by the user defined above! Defaults to "/var/spool/cups/tmp" or
# the value of the TMPDIR environment variable.
#
#TempDir /var/tmp
#TempDir /var/spool/cups/tmp
#
# FilterLimit: sets the maximum cost of all job filters that can be run
# at the same time. A limit of 0 means no limit. A typical job may need
# a filter limit of at least 200; limits less than the minimum required
# by a job force a single job to be printed at any time.
#
# The default limit is 0 (unlimited).
#
#FilterLimit 0
########
######## Network Options
@@ -239,8 +297,13 @@ LogLevel info
# Listen 1.2.3.4
# Listen 1.2.3.4:631
#
# NOTE: Unfortunately, most web browsers don't support TLS or HTTP Upgrades
# for encryption. If you want to support web-based encryption you'll
# probably need to listen on port 443 (the "https" port...)
#
#Port 80
#Port 443
Port 631
#
@@ -290,12 +353,30 @@ Port 631
########
#
# Browsing: whether or not to broadcast printer information to
# other CUPS servers. Enabled by default.
# Browsing: whether or not to broadcast and/or listen for CUPS printer
# information on the network. Enabled by default.
#
#Browsing On
#
# BrowseAddress: specifies a broadcast address to be used. By
# default browsing information is not sent!
#
# Note: HP-UX does not properly handle broadcast unless you have a
# Class A, B, C, or D netmask (i.e. no CIDR support).
#
# Note: Using the "global" broadcast address (255.255.255.255) will
# activate a Linux demand-dial link with the default configuration.
# If you have a LAN as well as the dial-up link, use the LAN's
# broadcast address.
#
#BrowseAddress x.y.z.255
#BrowseAddress x.y.255.255
#BrowseAddress x.255.255.255
#BrowseAddress 255.255.255.255
#
# BrowseShortNames: whether or not to use "short" names for remote printers
# when possible (e.g. "printer" instead of "printer@host".) Enabled by
@@ -304,18 +385,6 @@ Port 631
#BrowseShortNames Yes
#
# BrowseAddress: specifies a broadcast address to be used. By
# default browsing information is broadcast to all active interfaces.
#
# Note: HP-UX 10.20 and earlier do not properly handle broadcast unless
# you have a Class A, B, C, or D netmask (i.e. no CIDR support).
#
#BrowseAddress x.y.z.255
#BrowseAddress x.y.255.255
#BrowseAddress x.255.255.255
#
# BrowseAllow: specifies an address mask to allow for incoming browser
# packets. The default is to allow packets from all addresses.
@@ -472,8 +541,23 @@ Port 631
# The host and domain address require that you enable hostname lookups
# with "HostNameLookups On" above.
#
# Encryption: whether or not to use encryption; this depends on having
# the OpenSSL library linked into the CUPS library and scheduler.
#
# Possible values:
#
# Always - Always use encryption (SSL)
# Never - Never use encryption
# Required - Use TLS encryption upgrade
# IfRequested - Use encryption if the server requests it
#
# The default value is "IfRequested".
#
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
#<Location /classes>
@@ -535,8 +619,10 @@ AuthClass System
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
#Encryption Required
</Location>
#
# End of "$Id: cupsd.conf 1171 2000-06-27 21:15:41Z mike $".
# End of "$Id: cupsd.conf 1485 2000-12-20 13:41:17Z mike $".
#
+16 -13
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: mime.convs 1270 2000-08-03 18:05:22Z mike $"
# "$Id: mime.convs 1340 2000-09-06 13:53:00Z mike $"
#
# MIME converts file for the Common UNIX Printing System (CUPS).
#
@@ -41,23 +41,26 @@
# PostScript filters
#
#application/msword application/postscript 50 mswordtops
application/pdf application/postscript 50 pdftops
application/postscript application/vnd.cups-postscript 50 pstops
application/vnd.hp-HPGL application/postscript 50 hpgltops
image/* application/vnd.cups-postscript 50 imagetops
#text/html application/postscript 50 htmltops
text/html application/postscript 50 texttops
text/plain application/postscript 50 texttops
application/vnd.cups-form application/vnd.cups-postscript 50 formtops
#application/msword application/postscript 33 mswordtops
application/pdf application/postscript 33 pdftops
application/postscript application/vnd.cups-postscript 66 pstops
application/vnd.hp-HPGL application/postscript 66 hpgltops
image/* application/vnd.cups-postscript 66 imagetops
#text/html application/postscript 33 htmltops
application/x-cshell application/postscript 33 texttops
application/x-perl application/postscript 33 texttops
application/x-shell application/postscript 33 texttops
text/html application/postscript 33 texttops
text/plain application/postscript 33 texttops
application/vnd.cups-form application/vnd.cups-postscript 33 formtops
########################################################################
#
# Raster filters...
#
image/* application/vnd.cups-raster 50 imagetoraster
application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
image/* application/vnd.cups-raster 100 imagetoraster
application/vnd.cups-postscript application/vnd.cups-raster 100 pstoraster
########################################################################
#
@@ -71,5 +74,5 @@ application/vnd.cups-postscript application/vnd.cups-raster 50 pstoraster
#*/* application/vnd.cups-raw 0 -
#
# End of "$Id: mime.convs 1270 2000-08-03 18:05:22Z mike $".
# End of "$Id: mime.convs 1340 2000-09-06 13:53:00Z mike $".
#
+18 -5
Ver Arquivo
@@ -1,5 +1,5 @@
#
# "$Id: mime.types 1270 2000-08-03 18:05:22Z mike $"
# "$Id: mime.types 1501 2001-01-11 21:58:52Z mike $"
#
# MIME types file for the Common UNIX Printing System (CUPS).
#
@@ -60,7 +60,7 @@
# accepts 8-bit characters in the range 128-255.
#
# String constants must be surrounded by "" if they contain whitespace.
# To instead binary data into a string, use the <hex> notation.
# To insert binary data into a string, use the <hex> notation.
#
########################################################################
@@ -110,6 +110,13 @@ image/x-bitmap bmp string(0,BM) && !printable(2,14)
text/html html htm printable(0,1024) +\
(string(0,"<HTML>") string(0,"<!DOCTYPE"))
application/x-cshell csh printable(0,1024) + string(0,#!) +\
(contains(2,80,/csh) contains(2,80,/tcsh))
application/x-perl pl printable(0,1024) + string(0,#!) +\
contains(2,80,/perl)
application/x-shell sh printable(0,1024) + string(0,#!) +\
(contains(2,80,/bash) contains(2,80,/ksh)\
contains(2,80,/sh) contains(2,80,/zsh))
text/plain txt printable(0,1024)
########################################################################
@@ -118,9 +125,15 @@ text/plain txt printable(0,1024)
#
application/vnd.cups-form string(0,"<CUPSFORM>")
application/vnd.cups-postscript string(0,<1B>%-12345X)
application/vnd.cups-postscript string(0,<1B>%-12345X) + \
(contains(9,512,"LANGUAGE=POSTSCRIPT") \
contains(9,512,"LANGUAGE = POSTSCRIPT"))
application/vnd.cups-raster string(0,"RaSt") string(0,"tSaR")
application/vnd.cups-raw
application/vnd.cups-raw string(0,<1B>E) \
string(0,<1B>@) \
(string(0,<1B>%-12345X) + \
(contains(9,512,"LANGUAGE=PCL")) \
contains(9,512,"LANGUAGE = PCL")))
########################################################################
#
@@ -134,5 +147,5 @@ application/vnd.cups-raw
#application/octet-stream
#
# End of "$Id: mime.types 1270 2000-08-03 18:05:22Z mike $".
# End of "$Id: mime.types 1501 2001-01-11 21:58:52Z mike $".
#
+21 -1
Ver Arquivo
@@ -28,7 +28,7 @@
* Version of software...
*/
#define CUPS_SVERSION "CUPS v1.1.2"
#define CUPS_SVERSION "CUPS v1.1.6"
/*
* Where are files stored?
@@ -41,6 +41,7 @@
#define CUPS_REQUESTS "/var/spool/cups"
#define CUPS_LOGDIR "/var/logs/cups"
#define CUPS_DATADIR "/usr/share/cups"
#define CUPS_FONTPATH "/usr/share/cups/fonts"
/*
@@ -122,6 +123,25 @@
#undef HAVE_WAITPID
#undef HAVE_WAIT3
/*
* Do we have the mallinfo function and malloc.h?
*/
#undef HAVE_MALLINFO
#undef HAVE_MALLOC_H
/*
* Do we have the OpenSSL library?
*/
#undef HAVE_LIBSSL
/*
* Do we have <sys/ioctl.h>?
*/
#undef HAVE_SYS_IOCTL_H
/*
* End of "$Id$".
*/
+135 -61
Ver Arquivo
@@ -3,7 +3,7 @@ dnl "$Id$"
dnl
dnl Configuration script for the Common UNIX Printing System (CUPS).
dnl
dnl Copyright 1997-2000 by Easy Software Products, all rights reserved.
dnl Copyright 1997-2001 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
dnl property of Easy Software Products and are protected by Federal
@@ -47,6 +47,7 @@ AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging [default=no]],[i
OPTIM="-g "
fi])
AC_ARG_ENABLE(shared, [ --enable-shared turn on shared libraries [default=yes]])
AC_ARG_ENABLE(ssl, [ --enable-ssl turn on SSL/TLS support [default=no]])
AC_ARG_ENABLE(libtool_unsupported, [ --enable-libtool-unsupported=LIBTOOL_PATH
turn on building with libtool (UNSUPPORTED!) [default=no]],[if eval "test x$enable_libtool_unsupported != xno"; then
LIBTOOL="$enable_libtool_unsupported"
@@ -113,6 +114,8 @@ fi
AC_ARG_ENABLE(pam, [ --enable-pam turn on PAM support [default=yes]])
AC_ARG_WITH(fontpath, [ --with-fontpath set font path for pstoraster],fontpath="$withval",fontpath="")
dnl Checks for programs...
AC_PROG_AWK
AC_PROG_CC
@@ -142,9 +145,23 @@ dnl Architecture checks...
AC_C_BIGENDIAN
dnl Check for libraries...
AC_CHECK_LIB(c,crypt,LIBS="$LIBS",AC_CHECK_LIB(crypt,crypt))
AC_CHECK_HEADER(crypt.h, AC_DEFINE(HAVE_CRYPT_H))
AC_CHECK_LIB(c,crypt,LIBS="$LIBS")
if test "$ac_cv_lib_c_crypt" = "no"; then
AC_CHECK_LIB(crypt,crypt)
fi
AC_CHECK_LIB(sec,getspent)
LIBMALLOC=""
AC_CHECK_LIB(c,mallinfo,LIBS="$LIBS"; AC_DEFINE(HAVE_MALLINFO),LIBS="$LIBS")
if test "$ac_cv_lib_c_mallinfo" = "no"; then
AC_CHECK_LIB(malloc,mallinfo,
LIBS="$LIBS"
LIBMALLOC="-lmalloc"
AC_DEFINE(HAVE_MALLINFO),
LIBS="$LIBS")
fi
AC_SUBST(LIBMALLOC)
if test "$enable_pam" != "no"; then
OLDLIBS="$LIBS"
AC_CHECK_LIB(dl,dlopen)
@@ -173,6 +190,40 @@ else
echo "Not using -lnsl since you are running IRIX."
fi)
dnl Encryption support...
SSLLIBS=""
AC_SUBST(SSLLIBS)
if test "$enable_ssl" = "yes"; then
dnl Save the current libraries so the crypto stuff isn't always
dnl included...
SAVELIBS="$LIBS"
dnl Some ELF systems can't resolve all the symbols in libcrypto
dnl if libcrypto was linked against RSAREF, and fail to link the
dnl test program correctly, even though a correct installation
dnl of OpenSSL exists. So we test the linking three times in
dnl case the RSAREF libraries are needed.
for libcrypto in \
"-lcrypto" \
"-lcrypto -lrsaref" \
"-lcrypto -lRSAglue -lrsaref"
do
AC_CHECK_LIB(ssl,SSL_new,
[SSLLIBS="-lssl $libcrypto"
AC_DEFINE(HAVE_LIBSSL)],,
$libcrypto
)
if test "x${SSLLIBS}" != "x"; then
break
fi
done
LIBS="$SAVELIBS"
fi
dnl Save the current libraries since we don't want the image libraries
dnl included with every program...
SAVELIBS="$LIBS"
@@ -215,7 +266,12 @@ LIBS="$SAVELIBS"
dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_DIRENT
AC_CHECK_HEADER(crypt.h,AC_DEFINE(HAVE_CRYPT_H))
AC_CHECK_HEADER(malloc.h,AC_DEFINE(HAVE_MALLOC_H))
AC_CHECK_HEADER(shadow.h,AC_DEFINE(HAVE_SHADOW_H))
AC_CHECK_HEADER(stddef.h,AC_DEFINE(HAVE_STDDEF_H))
AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H))
AC_CHECK_HEADER(sys/ioctl.h,AC_DEFINE(HAVE_SYS_IOCTL_H))
dnl Checks for string functions.
AC_CHECK_FUNCS(strdup)
@@ -240,8 +296,10 @@ AC_CHECK_FUNCS(wait3)
dnl Update compiler options...
if test -n "$GCC"; then
GXX="gcc"
if test -z "$OPTIM"; then
OPTIM="-O2 -g3"
OPTIM="-O2"
fi
if test $PICFLAG = 1; then
OPTIM="-fPIC $OPTIM"
@@ -251,7 +309,7 @@ else
case $uname in
IRIX*)
if test -z "$OPTIM"; then
OPTIM="-O2 -g3"
OPTIM="-O2"
fi
if test $uversion -ge 62; then
OPTIM="$OPTIM -n32 -mips3"
@@ -267,7 +325,7 @@ else
SunOS*)
# Solaris
if test -z "$OPTIM"; then
OPTIM="-O -g3"
OPTIM="-xO4"
fi
if test $PICFLAG = 1; then
OPTIM="-KPIC $OPTIM"
@@ -348,8 +406,12 @@ if test "$infodir" = "\${prefix}/info" -a "$prefix" = "/"; then
fi
dnl Fix "datadir" variable if it hasn't been specified...
if test "$datadir" = "\${prefix}/share" -a "$prefix" = "/"; then
datadir="/usr/share"
if test "$datadir" = "\${prefix}/share"; then
if test "$prefix" = "/"; then
datadir="/usr/share"
else
datadir="$prefix/share"
fi
fi
dnl Fix "includedir" variable if it hasn't been specified...
@@ -382,11 +444,25 @@ fi
dnl Fix "mandir" variable...
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
if test "$uname" = "IRIX"; then
mandir="/usr/share/catman"
else
mandir="/usr/man"
fi
case "$uname" in
FreeBSD* | NetBSD* | OpenBSD*)
# *BSD
mandir="/usr/share/man"
;;
IRIX*)
# SGI IRIX
mandir="/usr/share/catman"
;;
*)
# All others
mandir="/usr/man"
;;
esac
fi
dnl Fix "fontpath" variable...
if test "x$fontpath" = "x"; then
fontpath="$datadir/cups/fonts"
fi
dnl Setup manpage extensions...
@@ -416,60 +492,55 @@ AC_SUBST(CAT5EXT)
AC_SUBST(CAT8EXT)
dnl Setup init.d locations...
if test $prefix = "/"; then
case "$uname" in
FreeBSD* | NetBSD* | OpenBSD*)
# *BSD
INITDIR=""
INITDDIR=""
;;
case "$uname" in
FreeBSD* | NetBSD* | OpenBSD*)
# *BSD
INITDIR=""
INITDDIR=""
;;
Linux*)
# Linux seems to choose an init.d directory at random...
if test -d /sbin/init.d; then
# SuSE
INITDIR="/sbin/init.d"
INITDDIR=".."
Linux*)
# Linux seems to choose an init.d directory at random...
if test -d /sbin/init.d; then
# SuSE
INITDIR="/sbin/init.d"
INITDDIR=".."
else
if test -d /etc/rc.d; then
# RedHat
INITDIR="/etc/rc.d"
INITDDIR="../init.d"
else
if test -d /etc/rc.d; then
# RedHat
INITDIR="/etc/rc.d"
INITDDIR="../init.d"
else
# Others
INITDIR="/etc"
INITDDIR="../init.d"
fi
# Others
INITDIR="/etc"
INITDDIR="../init.d"
fi
;;
fi
;;
OSF1* | HP-UX*)
INITDIR="/sbin"
INITDDIR="../init.d"
;;
OSF1* | HP-UX*)
INITDIR="/sbin"
INITDDIR="../init.d"
;;
*)
INITDIR="/etc"
INITDDIR="../init.d"
;;
*)
INITDIR="/etc"
INITDDIR="../init.d"
;;
esac
else
INITDIR="/etc"
INITDDIR="../init.d"
fi
esac
AC_SUBST(INITDIR)
AC_SUBST(INITDDIR)
dnl Setup default locations...
CUPS_SERVERROOT='${prefix}/etc/cups'
CUPS_LOGDIR='${prefix}/var/log/cups'
CUPS_REQUESTS='${prefix}/var/spool/cups'
CUPS_SERVERROOT='${sysconfdir}/cups'
CUPS_LOGDIR='${localstatedir}/log/cups'
CUPS_REQUESTS='${localstatedir}/spool/cups'
AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$prefix/etc/cups")
AC_DEFINE_UNQUOTED(CUPS_LOGDIR, "$prefix/var/log/cups")
AC_DEFINE_UNQUOTED(CUPS_REQUESTS, "$prefix/var/spool/cups")
AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$sysconfdir/cups")
AC_DEFINE_UNQUOTED(CUPS_LOGDIR, "$localstatedir/log/cups")
AC_DEFINE_UNQUOTED(CUPS_REQUESTS, "$localstatedir/spool/cups")
dnl See what directory to put server executables...
case "$uname" in
@@ -496,8 +567,8 @@ AC_SUBST(CUPS_REQUESTS)
dnl Set the CUPS_LOCALE directory...
case "$uname" in
Linux* | FreeBSD* | NetBSD* | OpenBSD*)
CUPS_LOCALEDIR='${exec_prefix}/share/locale'
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$exec_prefix/share/locale")
CUPS_LOCALEDIR='${datadir}/locale'
AC_DEFINE_UNQUOTED(CUPS_LOCALEDIR, "$datadir/locale")
;;
OSF1*)
@@ -515,15 +586,18 @@ esac
AC_SUBST(CUPS_LOCALEDIR)
dnl Set the CUPS_DATADIR directory...
CUPS_DATADIR='${exec_prefix}/share/cups'
AC_DEFINE_UNQUOTED(CUPS_DATADIR, "$exec_prefix/share/cups")
CUPS_DATADIR='${datadir}/cups'
AC_DEFINE_UNQUOTED(CUPS_DATADIR, "$datadir/cups")
AC_SUBST(CUPS_DATADIR)
dnl Set the CUPS_DOCROOT directory...
CUPS_DOCROOT='${exec_prefix}/share/doc/cups'
AC_DEFINE_UNQUOTED(CUPS_DOCROOT, "$exec_prefix/share/doc/cups")
CUPS_DOCROOT='${datadir}/doc/cups'
AC_DEFINE_UNQUOTED(CUPS_DOCROOT, "$datadir/doc/cups")
AC_SUBST(CUPS_DOCROOT)
dnl Set the CUPS_FONTPATH directory...
AC_DEFINE_UNQUOTED(CUPS_FONTPATH, "$fontpath")
AC_OUTPUT(Makedefs cups.sh)
dnl
-99
Ver Arquivo
@@ -15,105 +15,6 @@ Package=<4>
###############################################################################
Project: "cupsd"=.\scheduler\cupsd.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Project: "hpgltops"=.\filter\hpgltops.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Project: "image"=.\filter\image.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "pstops"=.\filter\pstops.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Project: "testmime"=.\cups\testmime.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Project: "testppd"=.\cups\testppd.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Project: "texttops"=.\filter\texttops.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name cups
End Project Dependency
}}}
###############################################################################
Global:
Package=<5>
+25 -214
Ver Arquivo
@@ -1,10 +1,10 @@
#
# "$Id: cups.list 1277 2000-08-04 14:53:49Z mike $"
# "$Id: cups.list 1533 2001-01-25 16:43:15Z mike $"
#
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
#
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
# Copyright 1997-2001 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
@@ -23,14 +23,16 @@
# WWW: http://www.cups.org
#
# Product information
%product Common UNIX Printing System
%copyright 1993-2000 by Easy Software Products, All Rights Reserved.
%copyright 1993-2001 by Easy Software Products, All Rights Reserved.
%vendor Easy Software Products
%license LICENSE.txt
%readme README.txt
%version 1.1.2
%version 1.1.6
%incompat printpro
# Server programs
%system all
# Server files
f 0555 root sys $SBINDIR/cupsd scheduler/cupsd
@@ -162,159 +164,34 @@ f 0444 root sys $DATADIR/data/psglyphs data/psglyphs
f 0444 root sys $DATADIR/data/testprint.ps data/testprint.ps
d 0555 root sys $DATADIR/fonts -
f 0444 root sys $DATADIR/fonts/AvantGarde-Book fonts/AvantGarde-Book
f 0444 root sys $DATADIR/fonts/AvantGarde-BookOblique fonts/AvantGarde-BookOblique
f 0444 root sys $DATADIR/fonts/AvantGarde-Demi fonts/AvantGarde-Demi
f 0444 root sys $DATADIR/fonts/AvantGarde-DemiOblique fonts/AvantGarde-DemiOblique
f 0444 root sys $DATADIR/fonts/Bookman-Demi fonts/Bookman-Demi
f 0444 root sys $DATADIR/fonts/Bookman-DemiItalic fonts/Bookman-DemiItalic
f 0444 root sys $DATADIR/fonts/Bookman-Light fonts/Bookman-Light
f 0444 root sys $DATADIR/fonts/Bookman-LightItalic fonts/Bookman-LightItalic
f 0444 root sys $DATADIR/fonts/Charter-Bold fonts/Charter-Bold
f 0444 root sys $DATADIR/fonts/Charter-BoldItalic fonts/Charter-BoldItalic
f 0444 root sys $DATADIR/fonts/Charter-Italic fonts/Charter-Italic
f 0444 root sys $DATADIR/fonts/Charter-Roman fonts/Charter-Roman
f 0444 root sys $DATADIR/fonts/Courier fonts/Courier
f 0444 root sys $DATADIR/fonts/Courier-Bold fonts/Courier-Bold
f 0444 root sys $DATADIR/fonts/Courier-BoldOblique fonts/Courier-BoldOblique
f 0444 root sys $DATADIR/fonts/Courier-Oblique fonts/Courier-Oblique
f 0444 root sys $DATADIR/fonts/Helvetica fonts/Helvetica
f 0444 root sys $DATADIR/fonts/Helvetica-Bold fonts/Helvetica-Bold
f 0444 root sys $DATADIR/fonts/Helvetica-BoldOblique fonts/Helvetica-BoldOblique
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow fonts/Helvetica-Narrow
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-Bold fonts/Helvetica-Narrow-Bold
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-BoldOblique fonts/Helvetica-Narrow-BoldOblique
f 0444 root sys $DATADIR/fonts/Helvetica-Narrow-Oblique fonts/Helvetica-Narrow-Oblique
f 0444 root sys $DATADIR/fonts/Helvetica-Oblique fonts/Helvetica-Oblique
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Bold fonts/NewCenturySchlbk-Bold
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-BoldItalic fonts/NewCenturySchlbk-BoldItalic
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Italic fonts/NewCenturySchlbk-Italic
f 0444 root sys $DATADIR/fonts/NewCenturySchlbk-Roman fonts/NewCenturySchlbk-Roman
f 0444 root sys $DATADIR/fonts/Palatino-Bold fonts/Palatino-Bold
f 0444 root sys $DATADIR/fonts/Palatino-BoldItalic fonts/Palatino-BoldItalic
f 0444 root sys $DATADIR/fonts/Palatino-Italic fonts/Palatino-Italic
f 0444 root sys $DATADIR/fonts/Palatino-Roman fonts/Palatino-Roman
f 0444 root sys $DATADIR/fonts/Symbol fonts/Symbol
f 0444 root sys $DATADIR/fonts/Times-Bold fonts/Times-Bold
f 0444 root sys $DATADIR/fonts/Times-BoldItalic fonts/Times-BoldItalic
f 0444 root sys $DATADIR/fonts/Times-Italic fonts/Times-Italic
f 0444 root sys $DATADIR/fonts/Times-Roman fonts/Times-Roman
f 0444 root sys $DATADIR/fonts/Utopia-Bold fonts/Utopia-Bold
f 0444 root sys $DATADIR/fonts/Utopia-BoldItalic fonts/Utopia-BoldItalic
f 0444 root sys $DATADIR/fonts/Utopia-Italic fonts/Utopia-Italic
f 0444 root sys $DATADIR/fonts/Utopia-Regular fonts/Utopia-Regular
f 0444 root sys $DATADIR/fonts/ZapfChancery-MediumItalic fonts/ZapfChancery-MediumItalic
f 0444 root sys $DATADIR/fonts/ZapfDingbats fonts/ZapfDingbats
f 0444 root sys $DATADIR/fonts fonts/*
d 0555 root sys $DATADIR/pstoraster -
f 0444 root sys $DATADIR/pstoraster/Fontmap pstoraster/Fontmap
f 0444 root sys $DATADIR/pstoraster/gs_btokn.ps pstoraster/gs_btokn.ps
f 0444 root sys $DATADIR/pstoraster/gs_ccfnt.ps pstoraster/gs_ccfnt.ps
f 0444 root sys $DATADIR/pstoraster/gs_cff.ps pstoraster/gs_cff.ps
f 0444 root sys $DATADIR/pstoraster/gs_cidfn.ps pstoraster/gs_cidfn.ps
f 0444 root sys $DATADIR/pstoraster/gs_cmap.ps pstoraster/gs_cmap.ps
f 0444 root sys $DATADIR/pstoraster/gs_cmdl.ps pstoraster/gs_cmdl.ps
f 0444 root sys $DATADIR/pstoraster/gs_dbt_e.ps pstoraster/gs_dbt_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_diskf.ps pstoraster/gs_diskf.ps
f 0444 root sys $DATADIR/pstoraster/gs_dpnxt.ps pstoraster/gs_dpnxt.ps
f 0444 root sys $DATADIR/pstoraster/gs_dps.ps pstoraster/gs_dps.ps
f 0444 root sys $DATADIR/pstoraster/gs_dps1.ps pstoraster/gs_dps1.ps
f 0444 root sys $DATADIR/pstoraster/gs_dps2.ps pstoraster/gs_dps2.ps
f 0444 root sys $DATADIR/pstoraster/gs_epsf.ps pstoraster/gs_epsf.ps
f 0444 root sys $DATADIR/pstoraster/gs_fform.ps pstoraster/gs_fform.ps
f 0444 root sys $DATADIR/pstoraster/gs_fonts.ps pstoraster/gs_fonts.ps
f 0444 root sys $DATADIR/pstoraster/gs_init.ps pstoraster/gs_init.ps
f 0444 root sys $DATADIR/pstoraster/gs_iso_e.ps pstoraster/gs_iso_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_kanji.ps pstoraster/gs_kanji.ps
f 0444 root sys $DATADIR/pstoraster/gs_ksb_e.ps pstoraster/gs_ksb_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_lev2.ps pstoraster/gs_lev2.ps
f 0444 root sys $DATADIR/pstoraster/gs_ll3.ps pstoraster/gs_ll3.ps
f 0444 root sys $DATADIR/pstoraster/gs_mex_e.ps pstoraster/gs_mex_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_mro_e.ps pstoraster/gs_mro_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_pfile.ps pstoraster/gs_pfile.ps
f 0444 root sys $DATADIR/pstoraster/gs_res.ps pstoraster/gs_res.ps
f 0444 root sys $DATADIR/pstoraster/gs_setpd.ps pstoraster/gs_setpd.ps
f 0444 root sys $DATADIR/pstoraster/gs_statd.ps pstoraster/gs_statd.ps
f 0444 root sys $DATADIR/pstoraster/gs_std_e.ps pstoraster/gs_std_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_sym_e.ps pstoraster/gs_sym_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_ttf.ps pstoraster/gs_ttf.ps
f 0444 root sys $DATADIR/pstoraster/gs_typ32.ps pstoraster/gs_typ32.ps
f 0444 root sys $DATADIR/pstoraster/gs_typ42.ps pstoraster/gs_typ42.ps
f 0444 root sys $DATADIR/pstoraster/gs_type1.ps pstoraster/gs_type1.ps
f 0444 root sys $DATADIR/pstoraster/gs_wan_e.ps pstoraster/gs_wan_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_wl1_e.ps pstoraster/gs_wl1_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_wl2_e.ps pstoraster/gs_wl2_e.ps
f 0444 root sys $DATADIR/pstoraster/gs_wl5_e.ps pstoraster/gs_wl5_e.ps
f 0444 root sys $DATADIR/pstoraster pstoraster/gs*.ps
d 0555 root sys $DATADIR/model -
f 0444 root sys $DATADIR/model/deskjet.ppd ppd/deskjet.ppd
f 0444 root sys $DATADIR/model/laserjet.ppd ppd/laserjet.ppd
f 0444 root sys $DATADIR/model/epson9.ppd ppd/epson9.ppd
f 0444 root sys $DATADIR/model/epson24.ppd ppd/epson24.ppd
f 0444 root sys $DATADIR/model/stcolor.ppd ppd/stcolor.ppd
f 0444 root sys $DATADIR/model/stphoto.ppd ppd/stphoto.ppd
f 0444 root sys $DATADIR/model ppd/*.ppd
d 0555 root sys $DATADIR/templates -
f 0444 root sys $DATADIR/templates/add-class.tmpl templates/add-class.tmpl
f 0444 root sys $DATADIR/templates/add-printer.tmpl templates/add-printer.tmpl
f 0444 root sys $DATADIR/templates/admin-op.tmpl templates/admin-op.tmpl
f 0444 root sys $DATADIR/templates/admin.tmpl templates/admin.tmpl
f 0444 root sys $DATADIR/templates/choose-device.tmpl templates/choose-device.tmpl
f 0444 root sys $DATADIR/templates/choose-make.tmpl templates/choose-make.tmpl
f 0444 root sys $DATADIR/templates/choose-members.tmpl templates/choose-members.tmpl
f 0444 root sys $DATADIR/templates/choose-model.tmpl templates/choose-model.tmpl
f 0444 root sys $DATADIR/templates/choose-serial.tmpl templates/choose-serial.tmpl
f 0444 root sys $DATADIR/templates/choose-uri.tmpl templates/choose-uri.tmpl
f 0444 root sys $DATADIR/templates/class-added.tmpl templates/class-added.tmpl
f 0444 root sys $DATADIR/templates/class-confirm.tmpl templates/class-confirm.tmpl
f 0444 root sys $DATADIR/templates/class-deleted.tmpl templates/class-deleted.tmpl
f 0444 root sys $DATADIR/templates/class-modified.tmpl templates/class-modified.tmpl
f 0444 root sys $DATADIR/templates/classes.tmpl templates/classes.tmpl
f 0444 root sys $DATADIR/templates/config-printer.tmpl templates/config-printer.tmpl
f 0444 root sys $DATADIR/templates/config-printer2.tmpl templates/config-printer2.tmpl
f 0444 root sys $DATADIR/templates/error.tmpl templates/error.tmpl
f 0444 root sys $DATADIR/templates/header.tmpl templates/header.tmpl
f 0444 root sys $DATADIR/templates/job-cancel.tmpl templates/job-cancel.tmpl
f 0444 root sys $DATADIR/templates/job-hold.tmpl templates/job-hold.tmpl
f 0444 root sys $DATADIR/templates/job-release.tmpl templates/job-release.tmpl
f 0444 root sys $DATADIR/templates/job-restart.tmpl templates/job-restart.tmpl
f 0444 root sys $DATADIR/templates/jobs.tmpl templates/jobs.tmpl
f 0444 root sys $DATADIR/templates/modify-class.tmpl templates/modify-class.tmpl
f 0444 root sys $DATADIR/templates/modify-printer.tmpl templates/modify-printer.tmpl
f 0444 root sys $DATADIR/templates/option-boolean.tmpl templates/option-boolean.tmpl
f 0444 root sys $DATADIR/templates/option-header.tmpl templates/option-header.tmpl
f 0444 root sys $DATADIR/templates/option-pickmany.tmpl templates/option-pickmany.tmpl
f 0444 root sys $DATADIR/templates/option-pickone.tmpl templates/option-pickone.tmpl
f 0444 root sys $DATADIR/templates/option-trailer.tmpl templates/option-trailer.tmpl
f 0444 root sys $DATADIR/templates/printer-accept.tmpl templates/printer-accept.tmpl
f 0444 root sys $DATADIR/templates/printer-added.tmpl templates/printer-added.tmpl
f 0444 root sys $DATADIR/templates/printer-configured.tmpl templates/printer-configured.tmpl
f 0444 root sys $DATADIR/templates/printer-confirm.tmpl templates/printer-confirm.tmpl
f 0444 root sys $DATADIR/templates/printer-deleted.tmpl templates/printer-deleted.tmpl
f 0444 root sys $DATADIR/templates/printer-modified.tmpl templates/printer-modified.tmpl
f 0444 root sys $DATADIR/templates/printer-reject.tmpl templates/printer-reject.tmpl
f 0444 root sys $DATADIR/templates/printer-start.tmpl templates/printer-start.tmpl
f 0444 root sys $DATADIR/templates/printer-stop.tmpl templates/printer-stop.tmpl
f 0444 root sys $DATADIR/templates/printers.tmpl templates/printers.tmpl
f 0444 root sys $DATADIR/templates/test-page.tmpl templates/test-page.tmpl
f 0444 root sys $DATADIR/templates/trailer.tmpl templates/trailer.tmpl
f 0444 root sys $DATADIR/templates templates/*.tmpl
# Config files
d 0555 root sys $SERVERROOT -
d 0711 root sys $SERVERROOT/certs -
d 0755 root sys $SERVERROOT/interfaces -
d 0755 root sys $SERVERROOT/ppd -
c 0644 root sys $SERVERROOT/classes.conf conf/classes.conf
c 0644 root sys $SERVERROOT/cupsd.conf conf/cupsd.conf
c 0644 root sys $SERVERROOT conf/*.conf
f 0644 root sys $SERVERROOT/mime.convs conf/mime.convs
f 0644 root sys $SERVERROOT/mime.types conf/mime.types
c 0644 root sys $SERVERROOT/printers.conf conf/printers.conf
%system linux
# Linux version needs PAM...
%requires /lib/libpam.so.0
d 0555 root sys $PAMDIR -
c 0644 root sys $PAMDIR/cups data/cups.pam
c 0644 root sys $PAMDIR/cups.suse data/cups.suse
%install if test -f /lib/security/pam_unix.so; then
%install mv $PAMDIR/cups.suse $PAMDIR/cups
%install fi
%system all
# Developer files
@@ -333,76 +210,10 @@ f 0444 root sys $LIBDIR/libcups.a cups/libcups.a
# Documentation files
d 0555 root sys $DOCDIR -
f 0444 root sys $DOCDIR/cups.css doc/cups.css
f 0444 root sys $DOCDIR/documentation.html doc/documentation.html
f 0444 root sys $DOCDIR/index.html doc/index.html
f 0444 root sys $DOCDIR doc/*.html
f 0444 root sys $DOCDIR doc/*.pdf
d 0555 root sys $DOCDIR/images -
f 0444 root sys $DOCDIR/images/classes.gif doc/images/classes.gif
f 0444 root sys $DOCDIR/images/printer-idle.gif doc/images/printer-idle.gif
f 0444 root sys $DOCDIR/images/printer-processing.gif doc/images/printer-processing.gif
f 0444 root sys $DOCDIR/images/printer-stopped.gif doc/images/printer-stopped.gif
f 0444 root sys $DOCDIR/images/accept-jobs.gif doc/images/accept-jobs.gif
f 0444 root sys $DOCDIR/images/add-class.gif doc/images/add-class.gif
f 0444 root sys $DOCDIR/images/add-printer.gif doc/images/add-printer.gif
f 0444 root sys $DOCDIR/images/cancel-job.gif doc/images/cancel-job.gif
f 0444 root sys $DOCDIR/images/cancel-jobs.gif doc/images/cancel-jobs.gif
f 0444 root sys $DOCDIR/images/cancel.gif doc/images/cancel.gif
f 0444 root sys $DOCDIR/images/continue.gif doc/images/continue.gif
f 0444 root sys $DOCDIR/images/config-printer.gif doc/images/config-printer.gif
f 0444 root sys $DOCDIR/images/cups-block-diagram.gif doc/images/cups-block-diagram.gif
f 0444 root sys $DOCDIR/images/delete-class.gif doc/images/delete-class.gif
f 0444 root sys $DOCDIR/images/delete-printer.gif doc/images/delete-printer.gif
f 0444 root sys $DOCDIR/images/hold-job.gif doc/images/hold-job.gif
f 0444 root sys $DOCDIR/images/left.gif doc/images/left.gif
f 0444 root sys $DOCDIR/images/logo.gif doc/images/logo.gif
f 0444 root sys $DOCDIR/images/manage-classes.gif doc/images/manage-classes.gif
f 0444 root sys $DOCDIR/images/manage-jobs.gif doc/images/manage-jobs.gif
f 0444 root sys $DOCDIR/images/manage-printers.gif doc/images/manage-printers.gif
f 0444 root sys $DOCDIR/images/modify-class.gif doc/images/modify-class.gif
f 0444 root sys $DOCDIR/images/modify-printer.gif doc/images/modify-printer.gif
f 0444 root sys $DOCDIR/images/navbar.gif doc/images/navbar.gif
f 0444 root sys $DOCDIR/images/print-test-page.gif doc/images/print-test-page.gif
f 0444 root sys $DOCDIR/images/reject-jobs.gif doc/images/reject-jobs.gif
f 0444 root sys $DOCDIR/images/release-job.gif doc/images/release-job.gif
f 0444 root sys $DOCDIR/images/restart-job.gif doc/images/restart-job.gif
f 0444 root sys $DOCDIR/images/right.gif doc/images/right.gif
f 0444 root sys $DOCDIR/images/show-active.gif doc/images/show-active.gif
f 0444 root sys $DOCDIR/images/show-completed.gif doc/images/show-completed.gif
f 0444 root sys $DOCDIR/images/start-class.gif doc/images/start-class.gif
f 0444 root sys $DOCDIR/images/start-printer.gif doc/images/start-printer.gif
f 0444 root sys $DOCDIR/images/stop-class.gif doc/images/stop-class.gif
f 0444 root sys $DOCDIR/images/stop-printer.gif doc/images/stop-printer.gif
f 0444 root sys $DOCDIR/cmp.html doc/cmp.html
f 0444 root sys $DOCDIR/cmp.pdf doc/cmp.pdf
f 0444 root sys $DOCDIR/cupsdoc.css doc/cupsdoc.css
f 0444 root sys $DOCDIR/idd.html doc/idd.html
f 0444 root sys $DOCDIR/idd.pdf doc/idd.pdf
f 0444 root sys $DOCDIR/ipp.html doc/ipp.html
f 0444 root sys $DOCDIR/ipp.pdf doc/ipp.pdf
f 0444 root sys $DOCDIR/overview.html doc/overview.html
f 0444 root sys $DOCDIR/overview.pdf doc/overview.pdf
f 0444 root sys $DOCDIR/sam.html doc/sam.html
f 0444 root sys $DOCDIR/sam.pdf doc/sam.pdf
f 0444 root sys $DOCDIR/sdd.html doc/sdd.html
f 0444 root sys $DOCDIR/sdd.pdf doc/sdd.pdf
f 0444 root sys $DOCDIR/spm.html doc/spm.html
f 0444 root sys $DOCDIR/spm.pdf doc/spm.pdf
f 0444 root sys $DOCDIR/sps.html doc/sps.html
f 0444 root sys $DOCDIR/sps.pdf doc/sps.pdf
f 0444 root sys $DOCDIR/ssr.html doc/ssr.html
f 0444 root sys $DOCDIR/ssr.pdf doc/ssr.pdf
f 0444 root sys $DOCDIR/sum.html doc/sum.html
f 0444 root sys $DOCDIR/sum.pdf doc/sum.pdf
f 0444 root sys $DOCDIR/svd.html doc/svd.html
f 0444 root sys $DOCDIR/svd.pdf doc/svd.pdf
f 0444 root sys $DOCDIR/images/cups-bar.gif doc/images/cups-bar.gif
f 0444 root sys $DOCDIR/images/cups-large.gif doc/images/cups-large.gif
f 0444 root sys $DOCDIR/images/cups-medium.gif doc/images/cups-medium.gif
f 0444 root sys $DOCDIR/images/cups-small.gif doc/images/cups-small.gif
f 0444 root sys $DOCDIR/images doc/images/*.gif
# Man pages
%system irix
@@ -444,7 +255,7 @@ d 0555 root sys $MANDIR/man5 -
d 0555 root sys $MANDIR/man1m -
f 0444 root sys $MANDIR/man1m/accept.1m man/accept.man
l 0444 root sys $MANDIR/man1m/reject.1m accept.man
l 0444 root sys $MANDIR/man1m/reject.1m accept.1m
f 0444 root sys $MANDIR/man1/backend.1 man/backend.man
f 0444 root sys $MANDIR/man1/classes.conf.5 man/classes.conf.man
f 0444 root sys $MANDIR/man1m/cups-lpd.1m man/cups-lpd.man
@@ -452,7 +263,7 @@ f 0444 root sys $MANDIR/man1m/cups-polld.1m man/cups-polld.man
f 0444 root sys $MANDIR/man1m/cupsd.1m man/cupsd.man
f 0444 root sys $MANDIR/man5/cupsd.conf.5 man/cupsd.conf.man
f 0444 root sys $MANDIR/man1m/enable.1m man/enable.man
l 0444 root sys $MANDIR/man1m/disable.1m enable.man
l 0444 root sys $MANDIR/man1m/disable.1m enable.1m
f 0444 root sys $MANDIR/man1/filter.1 man/filter.man
f 0444 root sys $MANDIR/man1m/lpadmin.1m man/lpadmin.man
f 0444 root sys $MANDIR/man1m/lpc.1m man/lpc.man
@@ -464,7 +275,7 @@ f 0444 root sys $MANDIR/man1/lprm.1 man/lprm.man
f 0444 root sys $MANDIR/man1/lpr.1 man/lpr.man
f 0444 root sys $MANDIR/man1/lpstat.1 man/lpstat.man
f 0444 root sys $MANDIR/man1/lp.1 man/lp.man
l 0444 root sys $MANDIR/man1/cancel.1 lp.man
l 0444 root sys $MANDIR/man1/cancel.1 lp.1
f 0444 root sys $MANDIR/man5/mime.convs.5 man/mime.convs.man
f 0444 root sys $MANDIR/man5/mime.types.5 man/mime.types.man
f 0444 root sys $MANDIR/man5/printers.conf.5 man/printers.conf.man
@@ -475,7 +286,7 @@ d 0555 root sys $MANDIR/man5 -
d 0555 root sys $MANDIR/man8 -
f 0444 root sys $MANDIR/man8/accept.8 man/accept.man
l 0444 root sys $MANDIR/man8/reject.8 accept.man
l 0444 root sys $MANDIR/man8/reject.8 accept.8
f 0444 root sys $MANDIR/man1/backend.1 man/backend.man
f 0444 root sys $MANDIR/man1/classes.conf.5 man/classes.conf.man
f 0444 root sys $MANDIR/man8/cups-lpd.8 man/cups-lpd.man
@@ -483,7 +294,7 @@ f 0444 root sys $MANDIR/man8/cups-polld.8 man/cups-polld.man
f 0444 root sys $MANDIR/man8/cupsd.8 man/cupsd.man
f 0444 root sys $MANDIR/man5/cupsd.conf.5 man/cupsd.conf.man
f 0444 root sys $MANDIR/man8/enable.8 man/enable.man
l 0444 root sys $MANDIR/man8/disable.8 enable.man
l 0444 root sys $MANDIR/man8/disable.8 enable.8
f 0444 root sys $MANDIR/man1/filter.1 man/filter.man
f 0444 root sys $MANDIR/man8/lpadmin.8 man/lpadmin.man
f 0444 root sys $MANDIR/man8/lpc.8 man/lpc.man
@@ -495,7 +306,7 @@ f 0444 root sys $MANDIR/man1/lprm.1 man/lprm.man
f 0444 root sys $MANDIR/man1/lpr.1 man/lpr.man
f 0444 root sys $MANDIR/man1/lpstat.1 man/lpstat.man
f 0444 root sys $MANDIR/man1/lp.1 man/lp.man
l 0444 root sys $MANDIR/man1/cancel.1 lp.man
l 0444 root sys $MANDIR/man1/cancel.1 lp.1
f 0444 root sys $MANDIR/man5/mime.convs.5 man/mime.convs.man
f 0444 root sys $MANDIR/man5/mime.types.5 man/mime.types.man
f 0444 root sys $MANDIR/man5/printers.conf.5 man/printers.conf.man
@@ -505,5 +316,5 @@ f 0444 root sys $MANDIR/man5/printers.conf.5 man/printers.conf.man
i 0555 root sys cups cups.sh
#
# End of "$Id: cups.list 1277 2000-08-04 14:53:49Z mike $".
# End of "$Id: cups.list 1533 2001-01-25 16:43:15Z mike $".
#
+2 -2
Ver Arquivo
@@ -6,11 +6,11 @@
#
# Linux chkconfig stuff:
#
# chkconfig: 02 99 00
# chkconfig: 0235 99 00
# description: Startup/shutdown script for the Common UNIX \
# Printing System (CUPS).
#
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
# Copyright 1997-2001 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
+45 -22
Ver Arquivo
@@ -1,11 +1,11 @@
#
# "$Id: cups.spec 1277 2000-08-04 14:53:49Z mike $"
# "$Id: cups.spec 1533 2001-01-25 16:43:15Z mike $"
#
# RPM "spec" file for the Common UNIX Printing System (CUPS).
#
# Original version by Jason McMullan <jmcc@ontv.com>.
#
# Copyright 1999-2000 by Easy Software Products, all rights reserved.
# Copyright 1999-2001 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
@@ -26,16 +26,16 @@
Summary: Common Unix Printing System
Name: cups
Version: 1.1.2
Version: 1.1.6
Release: 0
Copyright: GPL
Group: System Environment/Daemons
Source: ftp://ftp.easysw.com/pub/cups/%version/cups-%version-source.tar.gz
Source: ftp://ftp.easysw.com/pub/cups/%{version}/cups-%{version}-source.tar.gz
Url: http://www.cups.org
Packager: Michael Sweet <mike@easysw.com>
Vendor: Easy Software Products
# use buildroot so as not to disturb the version already installed
BuildRoot: /tmp/rpmbuild
BuildRoot: /var/tmp/%{name}-root
Conflicts: lpr
%package devel
@@ -67,6 +67,9 @@ make
# RPM_BUILD_ROOT exists
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc0.d
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc3.d
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/rc5.d
make prefix=$RPM_BUILD_ROOT \
exec_prefix=$RPM_BUILD_ROOT/usr \
@@ -120,34 +123,54 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
/etc/cups/certs
%config /etc/cups/classes.conf
%config /etc/cups/client.conf
%config /etc/cups/cupsd.conf
/etc/cups/interfaces
%dir /etc/cups
%config /etc/cups/*.conf
%dir /etc/cups/certs
%dir /etc/cups/interfaces
/etc/cups/mime.types
/etc/cups/mime.convs
/etc/cups/ppd
%config /etc/cups/printers.conf
%dir /etc/cups/ppd
%dir /etc/pam.d
/etc/pam.d/*
/etc/init.d/*
/etc/rc0.d/*
/etc/rc2.d/*
/etc/rc.d/*
# RC dirs are a pain under Linux... Uncomment the appropriate ones if you
# don't use Red Hat or Mandrake...
/etc/rc.d/init.d/*
/etc/rc.d/rc0.d/*
/etc/rc.d/rc3.d/*
/etc/rc.d/rc5.d/*
#/etc/init.d/*
#/etc/rc0.d/*
#/etc/rc3.d/*
#/etc/rc5.d/*
#/sbin/rc.d/*
#/sbin/rc.d/rc0.d/*
#/sbin/rc.d/rc3.d/*
#/sbin/rc.d/rc5.d/*
/usr/bin/*
/usr/lib/*.so*
%dir /usr/lib/cups
/usr/lib/cups/*
/usr/man/*
/usr/sbin/*
/usr/share/*
/usr/lib/cups/*
%attr(0700,lp,root) /var/spool/cups
%attr(1700,lp,root) /var/spool/cups/tmp
/sbin/init.d/*
%dir /usr/share/cups
/usr/share/cups/*
%dir /usr/share/doc/cups
/usr/share/doc/cups/*
%dir /usr/share/locale
/usr/share/locale/*
%attr(0700,lp,root) %dir /var/spool/cups
%attr(1700,lp,root) %dir /var/spool/cups/tmp
%files devel
%dir /usr/include/cups
/usr/include/cups/*
/usr/lib/*.a
#
# End of "$Id: cups.spec 1277 2000-08-04 14:53:49Z mike $".
# End of "$Id: cups.spec 1533 2001-01-25 16:43:15Z mike $".
#
+8 -7
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Support library Makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1997-2000 by Easy Software Products, all rights reserved.
# Copyright 1997-2001 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
@@ -59,7 +59,7 @@ all: $(TARGETS)
#
clean:
$(RM) $(OBJS) $(TARGETS)
$(RM) $(OBJS) $(TARGETS) `basename $(LIBCUPS) .2`
#
@@ -76,8 +76,8 @@ install: all
$(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
if test $(LIBCUPS) != "libcups.a" -a $(LIBCUPS) != "libcups.la"; then \
$(INSTALL_LIB) libcups.a $(LIBDIR); \
$(RM) `basename $(LIBCUPS) .2`; \
$(LN) $(LIBCUPS) `basename $(LIBCUPS) .2`; \
$(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
$(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
fi
@@ -87,7 +87,7 @@ install: all
libcups.so.2 libcups.sl.2: $(LIBOBJS) ../Makedefs
echo Linking $@...
$(DSO) $@ $(LIBOBJS)
$(DSO) $@ $(LIBOBJS) $(SSLLIBS)
$(RM) `basename $@ .2`
$(LN) $@ `basename $@ .2`
@@ -98,7 +98,8 @@ libcups.so.2 libcups.sl.2: $(LIBOBJS) ../Makedefs
libcups.la: $(LIBOBJS) ../Makedefs
echo Linking $@...
$(CC) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) -version-info 2:0
$(CC) $(LDFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \
-version-info 2:0 $(SSLLIBS) $(LIBS)
#
@@ -143,7 +144,7 @@ util.o: cups.h http.h ipp.h
testhttp: testhttp.o libcups.a
echo Linking $@...
$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a $(NETLIBS)
$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a $(NETLIBS) $(SSLLIBS)
testhttp.o: http.h
+18 -10
Ver Arquivo
@@ -85,11 +85,11 @@ LIB32=link.exe -lib
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\emit.c
SOURCE=.\dest.c
# End Source File
# Begin Source File
SOURCE=.\filter.c
SOURCE=.\emit.c
# End Source File
# Begin Source File
@@ -109,7 +109,11 @@ SOURCE=.\mark.c
# End Source File
# Begin Source File
SOURCE=.\mime.c
SOURCE=.\md5.c
# End Source File
# Begin Source File
SOURCE=.\md5passwd.c
# End Source File
# Begin Source File
@@ -125,10 +129,6 @@ SOURCE=.\ppd.c
# End Source File
# Begin Source File
SOURCE=.\raster.c
# End Source File
# Begin Source File
SOURCE=.\snprintf.c
# End Source File
# Begin Source File
@@ -137,7 +137,7 @@ SOURCE=.\string.c
# End Source File
# Begin Source File
SOURCE=.\type.c
SOURCE=.\usersys.c
# End Source File
# Begin Source File
@@ -153,6 +153,14 @@ SOURCE=.\cups.h
# End Source File
# Begin Source File
SOURCE=.\cups_C.h
# End Source File
# Begin Source File
SOURCE=.\debug.h
# End Source File
# Begin Source File
SOURCE=.\http.h
# End Source File
# Begin Source File
@@ -165,7 +173,7 @@ SOURCE=.\language.h
# End Source File
# Begin Source File
SOURCE=.\mime.h
SOURCE=.\md5.h
# End Source File
# Begin Source File
@@ -173,7 +181,7 @@ SOURCE=.\ppd.h
# End Source File
# Begin Source File
SOURCE=.\raster.h
SOURCE=.\string.h
# End Source File
# End Group
# End Target
+12 -4
Ver Arquivo
@@ -3,7 +3,7 @@
*
* API definitions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -29,8 +29,8 @@
* Include necessary headers...
*/
# include <cups/ipp.h>
# include <cups/ppd.h>
# include "ipp.h"
# include "ppd.h"
/*
@@ -46,7 +46,7 @@ extern "C" {
* Constants...
*/
# define CUPS_VERSION 1.0100
# define CUPS_VERSION 1.0103
# define CUPS_DATE_ANY -1
@@ -75,6 +75,7 @@ enum /* Not a typedef'd enum so we can OR */
CUPS_PRINTER_LARGE = 0x4000, /* Can do D/E/A1/A0 */
CUPS_PRINTER_VARIABLE = 0x8000, /* Can do variable sizes */
CUPS_PRINTER_IMPLICIT = 0x10000, /* Implicit class */
CUPS_PRINTER_DEFAULT = 0x20000, /* Default printer on network */
CUPS_PRINTER_OPTIONS = 0xfffc /* ~(CLASS | REMOTE | IMPLICIT) */
};
@@ -102,6 +103,7 @@ extern int cupsCancelJob(const char *printer, int job);
#define cupsDoRequest(http,request,resource) cupsDoFileRequest((http),(request),(resource),NULL)
extern ipp_t *cupsDoFileRequest(http_t *http, ipp_t *request,
const char *resource, const char *filename);
extern http_encryption_t cupsEncryption(void);
extern int cupsGetClasses(char ***classes);
extern const char *cupsGetDefault(void);
extern const char *cupsGetPPD(const char *printer);
@@ -125,6 +127,8 @@ extern void cupsSetDests(int num_dests, cups_dest_t *dests);
extern int cupsAddOption(const char *name, const char *value,
int num_options, cups_option_t **options);
extern void cupsEncodeOptions(ipp_t *ipp, int num_options,
cups_option_t *options);
extern void cupsFreeOptions(int num_options, cups_option_t *options);
extern const char *cupsGetOption(const char *name, int num_options,
cups_option_t *options);
@@ -135,6 +139,10 @@ extern int cupsMarkOptions(ppd_file_t *ppd, int num_options,
extern const char *cupsGetPassword(const char *prompt);
extern const char *cupsServer(void);
extern void cupsSetEncryption(http_encryption_t e);
extern void cupsSetPasswordCB(const char *(*cb)(const char *));
extern void cupsSetServer(const char *server);
extern void cupsSetUser(const char *user);
extern const char *cupsUser(void);
# ifdef __cplusplus
+2 -1
Ver Arquivo
@@ -18,7 +18,7 @@
"Cyan",
"Magenta",
"Yellow",
"Copyright 1993-2000 by Easy Software Products, All Rights Reserved.",
"Copyright 1993-2001 by Easy Software Products, All Rights Reserved.",
"General",
"Printer",
"Image",
@@ -124,6 +124,7 @@
"The request is too large for this server to process.",
"The request URI is too large for this server to process.",
"The request format is not understood by this server.",
"426 An upgrade to a secure connection is required. If you are seeing this message in a web browser then it does not support HTTP encryption upgrades.",
"500 The server has detected an unrecoverable error and cannot process your request.",
"The requested method is not implemented by this server.",
"The proxy server received an invalid response from an upstream server.",
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Debugging macros for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+23 -6
Ver Arquivo
@@ -4,7 +4,7 @@
* User-defined destination (and option) support for the Common UNIX
* Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -302,17 +302,24 @@ cupsSetDests(int num_dests, /* I - Number of destinations */
* Figure out which file to write to...
*/
#ifdef WIN32
if ((home = getenv("CUPS_SERVERROOT")) == NULL)
home = CUPS_SERVERROOT;
snprintf(filename, sizeof(filename), "%s/lpoptions", home);
#else
if (getuid() == 0)
{
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
snprintf(filename, sizeof(filename), "%s/lpoptions", home);
else
strcpy(filename, CUPS_SERVERROOT "/lpoptions");
if ((home = getenv("CUPS_SERVERROOT")) == NULL)
home = CUPS_SERVERROOT;
snprintf(filename, sizeof(filename), "%s/lpoptions", home);
}
else if ((home = getenv("HOME")) != NULL)
snprintf(filename, sizeof(filename), "%s/.lpoptions", home);
else
return;
#endif /* WIN32 */
/*
* Try to open the file...
@@ -369,8 +376,18 @@ cups_get_dests(const char *filename, /* I - File to read from */
*lineptr, /* Pointer into line */
*name, /* Name of destination/option */
*instance; /* Instance of destination */
const char *printer; /* PRINTER or LPDEST */
/*
* Check environment variables...
*/
if ((printer = getenv("LPDEST")) == NULL)
if ((printer = getenv("PRINTER")) != NULL)
if (strcmp(printer, "lp") == 0)
printer = NULL;
/*
* Try to open the file...
*/
@@ -480,7 +497,7 @@ cups_get_dests(const char *filename, /* I - File to read from */
* Set this as default if needed...
*/
if (strncasecmp(line, "default", 7) == 0)
if (strncasecmp(line, "default", 7) == 0 && printer == NULL)
{
for (i = 0; i < num_dests; i ++)
(*dests)[i].is_default = 0;
+38 -3
Ver Arquivo
@@ -3,7 +3,7 @@
*
* PPD code emission routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -156,6 +156,17 @@ ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
for (i = 0; i < count; i ++)
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
{
/*
* Send wrapper commands to prevent printer errors for unsupported
* options...
*/
if (fputs("[{\n", fp) < 0)
{
free(choices);
return (-1);
}
/*
* Send DSC comments with option...
*/
@@ -210,6 +221,12 @@ ppdEmit(ppd_file_t *ppd, /* I - PPD file record */
free(choices);
return (-1);
}
if (fputs("} stopped cleartomark\n", fp) < 0)
{
free(choices);
return (-1);
}
}
else if (fputs(choices[i]->code, fp) < 0)
{
@@ -243,12 +260,24 @@ ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
for (i = 0; i < count; i ++)
if (section != PPD_ORDER_EXIT && section != PPD_ORDER_JCL)
{
/*
* Send wrapper commands to prevent printer errors for unsupported
* options...
*/
if (write(fd, "[{\n", 3) < 1)
{
free(choices);
return (-1);
}
/*
* Send DSC comments with option...
*/
sprintf(buf, "%%%%BeginFeature: %s %s\n",
((ppd_option_t *)choices[i]->option)->keyword, choices[i]->choice);
snprintf(buf, sizeof(buf), "%%%%BeginFeature: %s %s\n",
((ppd_option_t *)choices[i]->option)->keyword,
choices[i]->choice);
if (write(fd, buf, strlen(buf)) < 1)
{
@@ -267,6 +296,12 @@ ppdEmitFd(ppd_file_t *ppd, /* I - PPD file record */
free(choices);
return (-1);
}
if (write(fd, "} stopped cleartomark\n", 22) < 1)
{
free(choices);
return (-1);
}
}
else if (write(fd, choices[i]->code, strlen(choices[i]->code)) < 1)
{
+373 -36
Ver Arquivo
@@ -3,9 +3,9 @@
*
* HTTP routines for the Common UNIX Printing System (CUPS) scheduler.
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These statusd instructions, statements, and computer programs are the
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
* copyright law. Distribution and use rights are outlined in the file
* "LICENSE.txt" which should have been included with this file. If this
@@ -29,6 +29,7 @@
* the server.
* httpClose() - Close an HTTP connection...
* httpConnect() - Connect to a HTTP server.
* httpEncryption() - Set the required encryption on the link.
* httpReconnect() - Reconnect to a HTTP server...
* httpSeparate() - Separate a Universal Resource Identifier into its
* components.
@@ -56,6 +57,7 @@
* http_field() - Return the field index for a field name.
* http_send() - Send a request with all fields and the trailing
* blank line.
* http_upgrade() - Force upgrade to TLS encryption.
*/
/*
@@ -78,6 +80,13 @@
# include <signal.h>
#endif /* !WIN32 && !__EMX__ */
#ifdef HAVE_LIBSSL
# include <openssl/err.h>
# include <openssl/rand.h>
# include <openssl/ssl.h>
#endif /* HAVE_LIBSSL */
/*
* Some operating systems have done away with the Fxxxx constants for
* the fcntl() call; this works around that "feature"...
@@ -95,6 +104,7 @@
static http_field_t http_field(const char *name);
static int http_send(http_t *http, http_state_t request,
const char *uri);
static int http_upgrade(http_t *http);
/*
@@ -166,6 +176,12 @@ static const char *months[12] =
void
httpInitialize(void)
{
#ifdef HAVE_LIBSSL
struct timeval curtime; /* Current time in microseconds */
int i; /* Looping var */
unsigned char data[1024]; /* Seed data */
#endif /* HAVE_LIBSSL */
#if defined(WIN32) || defined(__EMX__)
WSADATA winsockdata; /* WinSock data */
static int initialized = 0;/* Has WinSock been initialized? */
@@ -189,6 +205,24 @@ httpInitialize(void)
#else
signal(SIGPIPE, SIG_IGN);
#endif /* WIN32 || __EMX__ */
#ifdef HAVE_LIBSSL
SSL_load_error_strings();
SSL_library_init();
/*
* Using the current time is a dubious random seed, but on some systems
* it is the best we can do (on others, this seed isn't even used...)
*/
gettimeofday(&curtime, NULL);
srand(curtime.tv_sec + curtime.tv_usec);
for (i = 0; i < sizeof(data); i ++)
data[i] = rand(); /* Yes, this is a poor source of random data... */
RAND_seed(&data, sizeof(data));
#endif /* HAVE_LIBSSL */
}
@@ -234,9 +268,29 @@ httpCheck(http_t *http) /* I - HTTP connection */
void
httpClose(http_t *http) /* I - Connection to close */
{
if (http == NULL)
#ifdef HAVE_LIBSSL
SSL_CTX *context; /* Context for encryption */
SSL *conn; /* Connection for encryption */
#endif /* HAVE_LIBSSL */
if (!http)
return;
#ifdef HAVE_LIBSSL
if (http->tls)
{
conn = (SSL *)(http->tls);
context = SSL_get_SSL_CTX(conn);
SSL_shutdown(conn);
SSL_CTX_free(context);
SSL_free(conn);
http->tls = NULL;
}
#endif /* HAVE_LIBSSL */
#ifdef WIN32
closesocket(http->fd);
#else
@@ -295,6 +349,18 @@ httpConnect(const char *host, /* I - Host to connect to */
#else
http->hostaddr.sin_port = htons(port);
#endif /* WIN32 */
/*
* Set the default encryption status...
*/
if (port == 443)
http->encryption = HTTP_ENCRYPT_ALWAYS;
/*
* Connect to the remote system...
*/
if (httpReconnect(http))
{
free(http);
@@ -305,6 +371,36 @@ httpConnect(const char *host, /* I - Host to connect to */
}
/*
* 'httpEncryption()' - Set the required encryption on the link.
*/
int /* O - -1 on error, 0 on success */
httpEncryption(http_t *http, /* I - HTTP data */
http_encryption_t e) /* I - New encryption preference */
{
#ifdef HAVE_LIBSSL
if (!http)
return (0);
http->encryption = e;
if ((http->encryption == HTTP_ENCRYPT_ALWAYS && !http->tls) ||
(http->encryption == HTTP_ENCRYPT_NEVER && http->tls))
return (httpReconnect(http));
else if (http->encryption == HTTP_ENCRYPT_REQUIRED && !http->tls)
return (http_upgrade(http));
else
return (0);
#else
if (e == HTTP_ENCRYPT_ALWAYS || e == HTTP_ENCRYPT_REQUIRED)
return (-1);
else
return (0);
#endif /* HAVE_LIBSSL */
}
/*
* 'httpReconnect()' - Reconnect to a HTTP server...
*/
@@ -312,9 +408,25 @@ httpConnect(const char *host, /* I - Host to connect to */
int /* O - 0 on success, non-zero on failure */
httpReconnect(http_t *http) /* I - HTTP data */
{
int val; /* Socket option value */
int val; /* Socket option value */
#ifdef HAVE_LIBSSL
SSL_CTX *context; /* Context for encryption */
SSL *conn; /* Connection for encryption */
if (http->tls)
{
conn = (SSL *)(http->tls);
context = SSL_get_SSL_CTX(conn);
SSL_shutdown(conn);
SSL_CTX_free(context);
SSL_free(conn);
http->tls = NULL;
}
#endif /* HAVE_LIBSSL */
/*
* Close any previously open socket...
*/
@@ -380,6 +492,44 @@ httpReconnect(http_t *http) /* I - HTTP data */
http->error = 0;
http->status = HTTP_CONTINUE;
#ifdef HAVE_LIBSSL
if (http->encryption == HTTP_ENCRYPT_ALWAYS)
{
/*
* Always do encryption via SSL.
*/
context = SSL_CTX_new(SSLv23_method());
conn = SSL_new(context);
SSL_set_fd(conn, http->fd);
if (SSL_connect(conn) != 1)
{
SSL_CTX_free(context);
SSL_free(conn);
#if defined(WIN32) || defined(__EMX__)
http->error = WSAGetLastError();
#else
http->error = errno;
#endif /* WIN32 || __EMX__ */
http->status = HTTP_ERROR;
#ifdef WIN32
closesocket(http->fd);
#else
close(http->fd);
#endif
return (-1);
}
http->tls = conn;
}
else if (http->encryption == HTTP_ENCRYPT_REQUIRED)
return (http_upgrade(http));
#endif /* HAVE_LIBSSL */
return (0);
}
@@ -397,7 +547,9 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
int *port, /* O - Port number to use */
char *resource) /* O - Resource/filename [1024] */
{
char *ptr; /* Pointer into string... */
char *ptr; /* Pointer into string... */
const char *atsign, /* @ sign */
*slash; /* Separator */
if (uri == NULL || method == NULL || username == NULL || host == NULL ||
@@ -490,44 +642,49 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
}
/*
* Grab the hostname...
* Grab the usenname, if any...
*/
while (*uri == '/')
uri ++;
ptr = host;
while (!(*uri == ':' && isdigit(uri[1])) && *uri != '@' && *uri != '/' && *uri != '\0')
*ptr ++ = *uri ++;
if ((slash = strchr(uri, '/')) == NULL)
slash = uri + strlen(uri);
*ptr = '\0';
if (*uri == '@')
if ((atsign = strchr(uri, '@')) != NULL && atsign < slash)
{
/*
* Got a username...
* Got a username:password combo...
*/
strncpy(username, host, 31);
username[31] = '\0';
ptr = host;
uri ++;
while (*uri != ':' && *uri != '/' && *uri != '\0')
*ptr ++ = *uri ++;
for (ptr = username;
uri < atsign && ptr < (username + sizeof(username) - 1);
*ptr++ = *uri++);
*ptr = '\0';
uri = atsign + 1;
}
else
username[0] = '\0';
/*
* Grab the hostname...
*/
ptr = host;
while (*uri != ':' && *uri != '/' && *uri != '\0')
*ptr ++ = *uri ++;
*ptr = '\0';
if (*uri != ':')
{
if (strcasecmp(method, "http") == 0)
*port = 80;
else if (strcasecmp(method, "https") == 0)
*port = 443;
else if (strcasecmp(method, "ipp") == 0) /* Not registered yet... */
else if (strcasecmp(method, "ipp") == 0)
*port = ippPort();
else if (strcasecmp(method, "socket") == 0) /* Not registered yet... */
*port = 9100;
@@ -878,6 +1035,10 @@ httpRead(http_t *http, /* I - HTTP data */
if (http->used > 0)
memcpy(http->buffer, http->buffer + length, http->used);
}
#ifdef HAVE_LIBSSL
else if (http->tls)
bytes = SSL_read((SSL *)(http->tls), buffer, length);
#endif /* HAVE_LIBSSL */
else
{
DEBUG_printf(("httpRead: reading %d bytes from socket...\n", length));
@@ -960,7 +1121,13 @@ httpWrite(http_t *http, /* I - HTTP data */
while (length > 0)
{
#ifdef HAVE_LIBSSL
if (http->tls)
bytes = SSL_write((SSL *)(http->tls), buffer, length);
else
#endif /* HAVE_LIBSSL */
bytes = send(http->fd, buffer, length, 0);
if (bytes < 0)
{
DEBUG_puts("httpWrite: error writing data...\n");
@@ -1040,13 +1207,21 @@ httpGets(char *line, /* I - Line to read into */
else
bufptr ++;
if (bufptr >= bufend)
if (bufptr >= bufend && http->used < HTTP_MAX_BUFFER)
{
/*
* No newline; see if there is more data to be read...
*/
if ((bytes = recv(http->fd, bufend, HTTP_MAX_BUFFER - http->used, 0)) < 0)
#ifdef HAVE_LIBSSL
if (http->tls)
bytes = SSL_read((SSL *)(http->tls), bufend,
HTTP_MAX_BUFFER - http->used);
else
#endif /* HAVE_LIBSSL */
bytes = recv(http->fd, bufend, HTTP_MAX_BUFFER - http->used, 0);
if (bytes < 0)
{
/*
* Nope, can't get a line this time...
@@ -1088,7 +1263,7 @@ httpGets(char *line, /* I - Line to read into */
bufend += bytes;
}
}
while (bufptr >= bufend);
while (bufptr >= bufend && http->used < HTTP_MAX_BUFFER);
http->activity = time(NULL);
@@ -1099,6 +1274,7 @@ httpGets(char *line, /* I - Line to read into */
lineptr = line;
bufptr = http->buffer;
bytes = 0;
length --;
while (bufptr < bufend && bytes < length)
{
@@ -1107,14 +1283,7 @@ httpGets(char *line, /* I - Line to read into */
if (*bufptr == 0x0a)
{
bufptr ++;
*lineptr = '\0';
http->used -= bytes;
if (http->used > 0)
memcpy(http->buffer, bufptr, http->used);
DEBUG_printf(("httpGets(): Returning \"%s\"\n", line));
return (line);
break;
}
else if (*bufptr == 0x0d)
bufptr ++;
@@ -1122,6 +1291,18 @@ httpGets(char *line, /* I - Line to read into */
*lineptr++ = *bufptr++;
}
if (bytes > 0)
{
*lineptr = '\0';
http->used -= bytes;
if (http->used > 0)
memcpy(http->buffer, bufptr, http->used);
DEBUG_printf(("httpGets(): Returning \"%s\"\n", line));
return (line);
}
DEBUG_puts("httpGets(): No new line available!");
return (NULL);
@@ -1152,8 +1333,17 @@ httpPrintf(http_t *http, /* I - HTTP data */
DEBUG_printf(("httpPrintf: %s", buf));
for (tbytes = 0, bufptr = buf; tbytes < bytes; tbytes += nbytes, bufptr += nbytes)
if ((nbytes = send(http->fd, bufptr, bytes - tbytes, 0)) < 0)
{
#ifdef HAVE_LIBSSL
if (http->tls)
nbytes = SSL_write((SSL *)(http->tls), bufptr, bytes - tbytes);
else
#endif /* HAVE_LIBSSL */
nbytes = send(http->fd, bufptr, bytes - tbytes, 0);
if (nbytes < 0)
return (-1);
}
return (bytes);
}
@@ -1168,6 +1358,10 @@ httpStatus(http_status_t status) /* I - HTTP status code */
{
switch (status)
{
case HTTP_CONTINUE :
return ("Continue");
case HTTP_SWITCHING_PROTOCOLS :
return ("Switching Protocols");
case HTTP_OK :
return ("OK");
case HTTP_CREATED :
@@ -1190,6 +1384,8 @@ httpStatus(http_status_t status) /* I - HTTP status code */
return ("Request Entity Too Large");
case HTTP_URI_TOO_LONG :
return ("URI Too Long");
case HTTP_UPGRADE_REQUIRED :
return ("Upgrade Required");
case HTTP_NOT_IMPLEMENTED :
return ("Not Implemented");
case HTTP_NOT_SUPPORTED :
@@ -1212,9 +1408,9 @@ httpGetDateString(time_t t) /* I - UNIX time */
tdate = gmtime(&t);
sprintf(datetime, "%s, %02d %s %d %02d:%02d:%02d GMT",
days[tdate->tm_wday], tdate->tm_mday, months[tdate->tm_mon],
tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec);
snprintf(datetime, sizeof(datetime), "%s, %02d %s %d %02d:%02d:%02d GMT",
days[tdate->tm_wday], tdate->tm_mday, months[tdate->tm_mon],
tdate->tm_year + 1900, tdate->tm_hour, tdate->tm_min, tdate->tm_sec);
return (datetime);
}
@@ -1268,6 +1464,10 @@ httpUpdate(http_t *http) /* I - HTTP data */
http_field_t field; /* Field index */
int major, minor; /* HTTP version numbers */
http_status_t status; /* Authorization status */
#ifdef HAVE_LIBSSL
SSL_CTX *context; /* Context for encryption */
SSL *conn; /* Connection for encryption */
#endif /* HAVE_LIBSSL */
DEBUG_printf(("httpUpdate(%08x)\n", http));
@@ -1301,6 +1501,43 @@ httpUpdate(http_t *http) /* I - HTTP data */
if (http->status == HTTP_CONTINUE)
return (http->status);
#ifdef HAVE_LIBSSL
if (http->status == HTTP_SWITCHING_PROTOCOLS && !http->tls)
{
context = SSL_CTX_new(SSLv23_method());
conn = SSL_new(context);
SSL_set_fd(conn, http->fd);
if (SSL_connect(conn) != 1)
{
SSL_CTX_free(context);
SSL_free(conn);
#if defined(WIN32) || defined(__EMX__)
http->error = WSAGetLastError();
#else
http->error = errno;
#endif /* WIN32 || __EMX__ */
http->status = HTTP_ERROR;
#ifdef WIN32
closesocket(http->fd);
#else
close(http->fd);
#endif
return (HTTP_ERROR);
}
http->tls = conn;
return (HTTP_CONTINUE);
}
else if (http->status == HTTP_UPGRADE_REQUIRED &&
http->encryption != HTTP_ENCRYPT_NEVER)
http->encryption = HTTP_ENCRYPT_REQUIRED;
#endif /* HAVE_LIBSSL */
httpGetLength(http);
switch (http->state)
@@ -1630,6 +1867,14 @@ http_send(http_t *http, /* I - HTTP data */
http->status = HTTP_CONTINUE;
#ifdef HAVE_LIBSSL
if (http->encryption == HTTP_ENCRYPT_REQUIRED && !http->tls)
{
httpSetField(http, HTTP_FIELD_CONNECTION, "Upgrade");
httpSetField(http, HTTP_FIELD_UPGRADE, "TLS/1.0,SSL/2.0,SSL/3.0");
}
#endif /* HAVE_LIBSSL */
if (httpPrintf(http, "%s %s HTTP/1.1\r\n", codes[request], buf) < 1)
{
http->status = HTTP_ERROR;
@@ -1660,6 +1905,98 @@ http_send(http_t *http, /* I - HTTP data */
}
#ifdef HAVE_LIBSSL
/*
* 'http_upgrade()' - Force upgrade to TLS encryption.
*/
static int /* O - Status of connection */
http_upgrade(http_t *http) /* I - HTTP data */
{
int ret; /* Return value */
http_t myhttp; /* Local copy of HTTP data */
DEBUG_printf(("http_upgrade(%p)\n", http));
/*
* Copy the HTTP data to a local variable so we can do the OPTIONS
* request without interfering with the existing request data...
*/
memcpy(&myhttp, http, sizeof(myhttp));
/*
* Send an OPTIONS request to the server, requiring SSL or TLS
* encryption on the link...
*/
httpClearFields(&myhttp);
httpSetField(&myhttp, HTTP_FIELD_CONNECTION, "upgrade");
httpSetField(&myhttp, HTTP_FIELD_UPGRADE, "TLS/1.0, SSL/2.0, SSL/3.0");
if ((ret = httpOptions(&myhttp, "*")) == 0)
{
/*
* Wait for the secure connection...
*/
while (httpUpdate(&myhttp) == HTTP_CONTINUE);
}
httpFlush(&myhttp);
/*
* Copy the HTTP data back over, if any...
*/
http->fd = myhttp.fd;
http->error = myhttp.error;
http->activity = myhttp.activity;
http->status = myhttp.status;
http->version = myhttp.version;
http->keep_alive = myhttp.keep_alive;
http->used = myhttp.used;
if (http->used)
memcpy(http->buffer, myhttp.buffer, http->used);
http->auth_type = myhttp.auth_type;
http->nonce_count = myhttp.nonce_count;
memcpy(http->nonce, myhttp.nonce, sizeof(http->nonce));
http->tls = myhttp.tls;
http->encryption = myhttp.encryption;
/*
* See if we actually went secure...
*/
if (!http->tls)
{
/*
* Server does not support HTTP upgrade...
*/
DEBUG_puts("Server does not support HTTP upgrade!");
#ifdef WIN32
closesocket(http->fd);
#else
close(http->fd);
#endif
http->fd = -1;
return (-1);
}
else
return (ret);
}
#endif /* HAVE_LIBSSL */
/*
* End of "$Id$".
*/
+19 -2
Ver Arquivo
@@ -4,7 +4,7 @@
* Hyper-Text Transport Protocol definitions for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -47,7 +47,7 @@
# include <netinet/tcp.h>
# endif /* WIN32 || __EMX__ */
# include <cups/md5.h>
# include "md5.h"
/*
@@ -126,6 +126,19 @@ typedef enum
} http_encoding_t;
/*
* HTTP encryption values...
*/
typedef enum
{
HTTP_ENCRYPT_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */
HTTP_ENCRYPT_NEVER, /* Never encrypt */
HTTP_ENCRYPT_REQUIRED, /* Encryption is required (TLS upgrade) */
HTTP_ENCRYPT_ALWAYS /* Always encrypt (SSL) */
} http_encryption_t;
/*
* HTTP authentication types...
*/
@@ -150,6 +163,7 @@ typedef enum
HTTP_ERROR = -1, /* An error response from httpXxxx() */
HTTP_CONTINUE = 100, /* Everything OK, keep going... */
HTTP_SWITCHING_PROTOCOLS, /* HTTP upgrade to TLS/SSL */
HTTP_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */
HTTP_CREATED, /* PUT command was successful */
@@ -182,6 +196,7 @@ typedef enum
HTTP_REQUEST_TOO_LARGE, /* Request entity too large */
HTTP_URI_TOO_LONG, /* URI too long */
HTTP_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */
HTTP_UPGRADE_REQUIRED = 426, /* Upgrade to SSL/TLS required */
HTTP_SERVER_ERROR = 500, /* Internal server error */
HTTP_NOT_IMPLEMENTED, /* Feature not implemented */
@@ -261,6 +276,7 @@ typedef struct
/* Nonce value */
int nonce_count; /* Nonce count */
void *tls; /* TLS state information */
http_encryption_t encryption; /* Encryption requirements */
} http_t;
@@ -275,6 +291,7 @@ extern int httpCheck(http_t *http);
extern void httpClose(http_t *http);
extern http_t *httpConnect(const char *host, int port);
extern int httpDelete(http_t *http, const char *uri);
extern int httpEncryption(http_t *http, http_encryption_t e);
# define httpError(http) ((http)->error)
extern void httpFlush(http_t *http);
extern int httpGet(http_t *http, const char *uri);
+65 -24
Ver Arquivo
@@ -4,7 +4,7 @@
* Internet Printing Protocol support functions for the Common UNIX
* Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -44,6 +44,7 @@
* ippNew() - Allocate a new IPP request.
* ippPort() - Return the default IPP port number.
* ippRead() - Read data for an IPP request.
* ippSetPort() - Set the default port number.
* ippTimeToDate() - Convert from UNIX time to RFC 1903 format.
* ippWrite() - Write data for an IPP request.
* _ipp_add_attr() - Add a new attribute to the request.
@@ -65,6 +66,13 @@
#include <ctype.h>
/*
* Local globals...
*/
static int ipp_port = 0;
/*
* Local functions...
*/
@@ -85,7 +93,7 @@ ippAddBoolean(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddBoolean(%08x, %02x, \'%s\', %d)\n", ipp, group, name, value));
DEBUG_printf(("ippAddBoolean(%p, %02x, \'%s\', %d)\n", ipp, group, name, value));
if (ipp == NULL || name == NULL)
return (NULL);
@@ -117,7 +125,7 @@ ippAddBooleans(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddBooleans(%08x, %02x, \'%s\', %d, %08x)\n", ipp,
DEBUG_printf(("ippAddBooleans(%p, %02x, \'%s\', %d, %p)\n", ipp,
group, name, num_values, values));
if (ipp == NULL || name == NULL)
@@ -151,7 +159,7 @@ ippAddDate(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddDate(%08x, %02x, \'%s\', %08x)\n", ipp, group, name,
DEBUG_printf(("ippAddDate(%p, %02x, \'%s\', %p)\n", ipp, group, name,
value));
if (ipp == NULL || name == NULL || value == NULL)
@@ -183,7 +191,7 @@ ippAddInteger(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddInteger(%08x, %d, \'%s\', %d)\n", ipp, group, name,
DEBUG_printf(("ippAddInteger(%p, %d, \'%s\', %d)\n", ipp, group, name,
value));
if (ipp == NULL || name == NULL)
@@ -260,9 +268,10 @@ ippAddString(ipp_t *ipp, /* I - IPP request */
attr->group_tag = group;
attr->value_tag = type;
attr->values[0].string.charset = charset ? strdup(charset) : NULL;
attr->values[0].string.text = strdup(value);
attr->values[0].string.text = value ? strdup(value) : NULL;
if (type == IPP_TAG_LANGUAGE || type == IPP_TAG_CHARSET)
if ((type == IPP_TAG_LANGUAGE || type == IPP_TAG_CHARSET) &&
attr->values[0].string.text)
{
/*
* Convert to lowercase and change _ to - as needed...
@@ -472,7 +481,7 @@ ippAddSeparator(ipp_t *ipp) /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("ippAddSeparator(%08x)\n", ipp));
DEBUG_printf(("ippAddSeparator(%p)\n", ipp));
if (ipp == NULL)
return (NULL);
@@ -547,6 +556,8 @@ ippDelete(ipp_t *ipp) /* I - IPP request */
*next; /* Next attribute */
DEBUG_printf(("ippNew(): %p\n", ipp));
if (ipp == NULL)
return;
@@ -648,23 +659,26 @@ ippFindAttribute(ipp_t *ipp, /* I - IPP request */
const char *name, /* I - Name of attribute */
ipp_tag_t type) /* I - Type of attribute */
{
ipp_attribute_t *attr; /* Current atttribute */
ipp_attribute_t *attr; /* Current atttribute */
ipp_tag_t value_tag; /* Value tag */
DEBUG_printf(("ippFindAttribute(%08x, \'%s\')\n", ipp, name));
DEBUG_printf(("ippFindAttribute(%p, \'%s\')\n", ipp, name));
if (ipp == NULL || name == NULL)
return (NULL);
for (attr = ipp->attrs; attr != NULL; attr = attr->next)
{
DEBUG_printf(("ippFindAttribute: attr = %08x, name = \'%s\'\n", attr,
DEBUG_printf(("ippFindAttribute: attr = %p, name = \'%s\'\n", attr,
attr->name));
value_tag = attr->value_tag & ~IPP_TAG_COPY;
if (attr->name != NULL && strcasecmp(attr->name, name) == 0 &&
(attr->value_tag == type || type == IPP_TAG_ZERO ||
(attr->value_tag == IPP_TAG_TEXTLANG && type == IPP_TAG_TEXT) ||
(attr->value_tag == IPP_TAG_NAMELANG && type == IPP_TAG_NAME)))
(value_tag == type || type == IPP_TAG_ZERO ||
(value_tag == IPP_TAG_TEXTLANG && type == IPP_TAG_TEXT) ||
(value_tag == IPP_TAG_NAMELANG && type == IPP_TAG_NAME)))
return (attr);
}
@@ -719,7 +733,7 @@ ippLength(ipp_t *ipp) /* I - IPP request */
bytes += 2 * attr->num_values; /* Name lengths */
bytes += 2 * attr->num_values; /* Value lengths */
switch (attr->value_tag)
switch (attr->value_tag & ~IPP_TAG_COPY)
{
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
@@ -800,6 +814,8 @@ ippNew(void)
temp->request.any.version[1] = 1;
}
DEBUG_printf(("ippNew(): %p\n", temp));
return (temp);
}
@@ -819,7 +835,7 @@ ippRead(http_t *http, /* I - HTTP data */
ipp_tag_t tag; /* Current tag */
DEBUG_printf(("ippRead(%08x, %08x)\n", http, ipp));
DEBUG_printf(("ippRead(%p, %p)\n", http, ipp));
if (http == NULL || ipp == NULL)
return (IPP_ERROR);
@@ -865,6 +881,10 @@ ippRead(http_t *http, /* I - HTTP data */
ipp->current = NULL;
ipp->curtag = IPP_TAG_ZERO;
DEBUG_printf(("ippRead: version=%d.%d\n", buffer[0], buffer[1]));
DEBUG_printf(("ippRead: op_status=%04x\n", ipp->request.any.op_status));
DEBUG_printf(("ippRead: request_id=%d\n", ipp->request.any.request_id));
/*
* If blocking is disabled, stop here...
*/
@@ -1199,6 +1219,10 @@ ippWrite(http_t *http, /* I - HTTP data */
ipp->current = ipp->attrs;
ipp->curtag = IPP_TAG_ZERO;
DEBUG_printf(("ippWrite: version=%d.%d\n", buffer[0], buffer[1]));
DEBUG_printf(("ippWrite: op_status=%04x\n", ipp->request.any.op_status));
DEBUG_printf(("ippWrite: request_id=%d\n", ipp->request.any.request_id));
/*
* If blocking is disabled, stop here...
*/
@@ -1244,7 +1268,7 @@ ippWrite(http_t *http, /* I - HTTP data */
memcpy(bufptr, attr->name, n);
bufptr += n;
switch (attr->value_tag)
switch (attr->value_tag & ~IPP_TAG_COPY)
{
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
@@ -1439,7 +1463,7 @@ ippWrite(http_t *http, /* I - HTTP data */
n = strlen(attr->values[i].string.charset) +
strlen(attr->values[i].string.text) +
2;
4;
if ((sizeof(buffer) - (bufptr - buffer)) < (n + 2))
{
@@ -1577,12 +1601,25 @@ ippPort(void)
struct servent *port; /* Port number info */
if ((server_port = getenv("IPP_PORT")) != NULL)
return (atoi(server_port));
if (ipp_port)
return (ipp_port);
else if ((server_port = getenv("IPP_PORT")) != NULL)
return (ipp_port = atoi(server_port));
else if ((port = getservbyname("ipp", NULL)) == NULL)
return (IPP_PORT);
return (ipp_port = IPP_PORT);
else
return (ntohs(port->s_port));
return (ipp_port = ntohs(port->s_port));
}
/*
* 'ippSetPort()' - Set the default port number.
*/
void
ippSetPort(int p) /* I - Port number to use */
{
ipp_port = p;
}
@@ -1597,7 +1634,7 @@ _ipp_add_attr(ipp_t *ipp, /* I - IPP request */
ipp_attribute_t *attr; /* New attribute */
DEBUG_printf(("_ipp_add_attr(%08x, %d)\n", ipp, num_values));
DEBUG_printf(("_ipp_add_attr(%p, %d)\n", ipp, num_values));
if (ipp == NULL || num_values < 0)
return (NULL);
@@ -1617,6 +1654,8 @@ _ipp_add_attr(ipp_t *ipp, /* I - IPP request */
ipp->last = attr;
DEBUG_printf(("_ipp_add_attr(): %p\n", attr));
return (attr);
}
@@ -1631,6 +1670,8 @@ _ipp_free_attr(ipp_attribute_t *attr) /* I - Attribute to free */
int i; /* Looping var */
DEBUG_printf(("_ipp_free_attr(): %p\n", attr));
switch (attr->value_tag)
{
case IPP_TAG_TEXT :
@@ -1650,7 +1691,7 @@ _ipp_free_attr(ipp_attribute_t *attr) /* I - Attribute to free */
case IPP_TAG_NAMELANG :
for (i = 0; i < attr->num_values; i ++)
{
if (attr->values[i].string.charset)
if (attr->values[i].string.charset && i == 0)
free(attr->values[i].string.charset);
free(attr->values[i].string.text);
}
+5 -3
Ver Arquivo
@@ -4,7 +4,7 @@
* Internet Printing Protocol definitions for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -30,7 +30,7 @@
* Include necessary headers...
*/
# include <cups/http.h>
# include "http.h"
/*
@@ -100,7 +100,8 @@ typedef enum /**** Format tags for attribute formats... ****/
IPP_TAG_URISCHEME,
IPP_TAG_CHARSET,
IPP_TAG_LANGUAGE,
IPP_TAG_MIMETYPE
IPP_TAG_MIMETYPE,
IPP_TAG_COPY = 0x80000000
} ipp_tag_t;
typedef enum /**** Resolution units... ****/
@@ -342,6 +343,7 @@ extern ipp_state_t ippRead(http_t *http, ipp_t *ipp);
extern const ipp_uchar_t *ippTimeToDate(time_t t);
extern ipp_state_t ippWrite(http_t *http, ipp_t *ipp);
extern int ippPort(void);
extern void ippSetPort(int p);
extern ipp_attribute_t *_ipp_add_attr(ipp_t *, int);
extern void _ipp_free_attr(ipp_attribute_t *);
+9 -4
Ver Arquivo
@@ -3,7 +3,7 @@
*
* I18N/language support for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -263,7 +263,10 @@ cupsLangGet(const char *language) /* I - Language or locale */
*/
if (fp == NULL)
strcpy(line, lang_default[0]);
{
strncpy(line, lang_default[0], sizeof(line) - 1);
line[sizeof(line) - 1] = '\0';
}
else if (fgets(line, sizeof(line), fp) == NULL)
{
/*
@@ -320,7 +323,8 @@ cupsLangGet(const char *language) /* I - Language or locale */
*/
lang->used ++;
strcpy(lang->language, langname);
strncpy(lang->language, langname, sizeof(lang->language) - 1);
lang->language[sizeof(lang->language) - 1] = '\0';
for (i = 0; i < (sizeof(lang_encodings) / sizeof(lang_encodings[0])); i ++)
if (strcmp(lang_encodings[i], line) == 0)
@@ -347,7 +351,8 @@ cupsLangGet(const char *language) /* I - Language or locale */
if (lang_default[count] == NULL)
break;
strcpy(line, lang_default[count]);
strncpy(line, lang_default[count], sizeof(line) - 1);
/* Already set last byte to 0 above... */
}
else if (fgets(line, sizeof(line), fp) == NULL)
break;
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Multi-language support for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+7 -3
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Option marking routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -118,7 +118,9 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
if (c1->marked)
break;
if (j == 0 || strcasecmp(c1->choice, "None") == 0 ||
if (j == 0 ||
strcasecmp(c1->choice, "None") == 0 ||
strcasecmp(c1->choice, "Off") == 0 ||
strcasecmp(c1->choice, "False") == 0)
c1 = NULL;
}
@@ -149,7 +151,9 @@ ppdConflicts(ppd_file_t *ppd) /* I - PPD to check */
if (c2->marked)
break;
if (j == 0 || strcasecmp(c2->choice, "None") == 0 ||
if (j == 0 ||
strcasecmp(c2->choice, "None") == 0 ||
strcasecmp(c2->choice, "Off") == 0 ||
strcasecmp(c2->choice, "False") == 0)
c2 = NULL;
}
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* MD5 password support for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+287 -6
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Option routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -23,11 +23,12 @@
*
* Contents:
*
* cupsAddOption() - Add an option to an option array.
* cupsFreeOptions() - Free all memory used by options.
* cupsGetOption() - Get an option value.
* cupsParseOptions() - Parse options from a command-line argument.
* cupsMarkOptions() - Mark command-line options in a PPD file.
* cupsAddOption() - Add an option to an option array.
* cupsEncodeOptions() - Encode printer options into IPP attributes.
* cupsFreeOptions() - Free all memory used by options.
* cupsGetOption() - Get an option value.
* cupsParseOptions() - Parse options from a command-line argument.
* cupsMarkOptions() - Mark command-line options in a PPD file.
*/
/*
@@ -38,6 +39,7 @@
#include <stdlib.h>
#include <ctype.h>
#include "string.h"
#include "debug.h"
/*
@@ -100,6 +102,274 @@ cupsAddOption(const char *name, /* I - Name of option */
}
/*
* 'cupsEncodeOptions()' - Encode printer options into IPP attributes.
*/
void
cupsEncodeOptions(ipp_t *ipp, /* I - Request to add to */
int num_options, /* I - Number of options */
cups_option_t *options) /* I - Options */
{
int i, j; /* Looping vars */
int count; /* Number of values */
int n; /* Attribute value */
char *s, /* Pointer into option value */
*val, /* Pointer to option value */
*copy, /* Copy of option value */
*sep; /* Option separator */
ipp_attribute_t *attr; /* IPP job-id attribute */
DEBUG_printf(("cupsEncodeOptions(%p, %d, %p)\n", ipp, num_options, options));
if (ipp == NULL || num_options < 1 || options == NULL)
return;
/*
* Handle the document format stuff first...
*/
if ((val = (char *)cupsGetOption("document-format", num_options, options)) != NULL)
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, val);
else if (cupsGetOption("raw", num_options, options))
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
/*
* Then add all other options...
*/
for (i = 0; i < num_options; i ++)
{
/*
* Skip document format options - handled above...
*/
if (strcasecmp(options[i].name, "raw") == 0 ||
strcasecmp(options[i].name, "document-format") == 0)
continue;
/*
* Count the number of values...
*/
for (count = 1, sep = options[i].value;
(sep = strchr(sep + 1, ',')) != NULL;
count ++);
DEBUG_printf(("cupsEncodeOptions: option = \'%s\', count = %d\n",
options[i].name, count));
if ((attr = _ipp_add_attr(ipp, count)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for attributes!");
return;
}
attr->group_tag = IPP_TAG_JOB;
if ((attr->name = strdup(options[i].name)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for name!");
return;
}
if (count > 1)
{
/*
* Make a copy of the value we can fiddle with...
*/
if ((copy = strdup(options[i].value)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for value copy!");
return;
}
val = copy;
}
else
{
/*
* Since we have a single value, use the value directly...
*/
val = options[i].value;
copy = NULL;
}
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, option=MxN, and option=val1,val2,...,valN.
*/
if (*val == '\0')
{
/*
* Old-style System V boolean value...
*/
attr->value_tag = IPP_TAG_BOOLEAN;
if (strncasecmp(attr->name, "no", 2) == 0)
{
DEBUG_puts("cupsEncodeOptions: Added boolean false value...");
strcpy(attr->name, attr->name + 2);
attr->values[0].boolean = 0;
}
else
{
DEBUG_puts("cupsEncodeOptions: Added boolean true value...");
attr->values[0].boolean = 1;
}
}
else
{
/*
* Scan the value string for values...
*/
for (j = 0; *val != '\0'; val = sep, j ++)
{
/*
* Find the end of this value and mark it if needed...
*/
if ((sep = strchr(val, ',')) != NULL)
*sep++ = '\0';
else
sep = val + strlen(val);
/*
* See what kind of value it is...
*/
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
attr->value_tag = IPP_TAG_BOOLEAN;
attr->values[j].boolean = 1;
DEBUG_puts("cupsEncodeOptions: Added boolean true value...");
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
attr->value_tag = IPP_TAG_BOOLEAN;
attr->values[j].boolean = 0;
DEBUG_puts("cupsEncodeOptions: Added boolean false value...");
}
else
{
/*
* Number, range, resolution, or string...
*/
n = strtol(val, &s, 0);
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
{
/*
* String value(s)...
*/
if ((attr->values[j].string.text = strdup(val)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for string!");
return;
}
attr->value_tag = IPP_TAG_NAME;
DEBUG_printf(("cupsEncodeOptions: Added string value \'%s\'...\n", val));
}
else if (*s == '-')
{
attr->value_tag = IPP_TAG_RANGE;
attr->values[j].range.lower = n;
attr->values[j].range.upper = strtol(s + 1, NULL, 0);
DEBUG_printf(("cupsEncodeOptions: Added range option value %d-%d...\n",
n, attr->values[j].range.upper));
}
else if (*s == 'x')
{
attr->value_tag = IPP_TAG_RESOLUTION;
attr->values[j].resolution.xres = n;
attr->values[j].resolution.yres = strtol(s + 1, &s, 0);
if (strcasecmp(s, "dpc") == 0)
attr->values[j].resolution.units = IPP_RES_PER_CM;
else if (strcasecmp(s, "dpi") == 0)
attr->values[j].resolution.units = IPP_RES_PER_INCH;
else
{
if ((attr->values[j].string.text = strdup(val)) == NULL)
{
/*
* Ran out of memory!
*/
DEBUG_puts("cupsEncodeOptions: Ran out of memory for string!");
return;
}
attr->value_tag = IPP_TAG_NAME;
DEBUG_printf(("cupsEncodeOptions: Added string value \'%s\'...\n", val));
continue;
}
DEBUG_printf(("cupsEncodeOptions: Adding resolution option value %s...\n",
val));
}
else
{
attr->value_tag = IPP_TAG_INTEGER;
attr->values[j].integer = n;
DEBUG_printf(("cupsEncodeOptions: Adding integer option value %d...\n", n));
}
}
}
}
}
}
/*
* 'cupsFreeOptions()' - Free all memory used by options.
*/
@@ -172,6 +442,17 @@ cupsParseOptions(const char *arg, /* I - Argument to parse */
copyarg = strdup(arg);
ptr = copyarg;
/*
* Skip leading spaces...
*/
while (isspace(*ptr))
ptr ++;
/*
* Loop through the string...
*/
while (*ptr != '\0')
{
/*
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Page size functions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+41 -41
Ver Arquivo
@@ -3,7 +3,7 @@
*
* PPD file routines for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -108,6 +108,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
ppd_emul_t *emul; /* Current emulation */
ppd_group_t *group; /* Current group */
char **font; /* Current font */
char **filter; /* Current filter */
/*
@@ -121,6 +122,10 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
* Free all strings at the top level...
*/
safe_free(ppd->patches);
safe_free(ppd->jcl_begin);
safe_free(ppd->jcl_ps);
safe_free(ppd->jcl_end);
safe_free(ppd->lang_encoding);
safe_free(ppd->lang_version);
safe_free(ppd->modelname);
@@ -171,6 +176,18 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */
if (ppd->num_consts > 0)
safe_free(ppd->consts);
/*
* Free any filters...
*/
if (ppd->num_filters > 0)
{
for (i = ppd->num_filters, filter = ppd->filters; i > 0; i --, filter ++)
safe_free(*filter);
safe_free(ppd->filters);
}
/*
* Free any fonts...
*/
@@ -1028,45 +1045,6 @@ ppdOpen(FILE *fp) /* I - File to read from */
}
else if (strcmp(keyword, "CloseGroup") == 0)
group = NULL;
else if (strcmp(keyword, "OpenSubGroup") == 0)
{
/*
* Open a new sub-group...
*/
DEBUG_printf(("group = %p, subgroup = %p\n", group, subgroup));
if (group == NULL || subgroup != NULL)
{
ppdClose(ppd);
safe_free(string);
return (NULL);
}
if (group->num_subgroups == 0)
subgroup = malloc(sizeof(ppd_group_t));
else
subgroup = realloc(group->subgroups,
(group->num_subgroups + 1) * sizeof(ppd_group_t));
if (subgroup == NULL)
{
ppdClose(ppd);
safe_free(string);
return (NULL);
}
group->subgroups = subgroup;
subgroup += group->num_subgroups;
group->num_subgroups ++;
memset(subgroup, 0, sizeof(ppd_group_t));
ppd_decode(string);
ppd_fix(string);
strncpy(subgroup->text, string, sizeof(subgroup->text) - 1);
}
else if (strcmp(keyword, "CloseSubGroup") == 0)
subgroup = NULL;
else if (strcmp(keyword, "OrderDependency") == 0 ||
strcmp(keyword, "NonUIOrderDependency") == 0)
{
@@ -1639,7 +1617,29 @@ ppd_read(FILE *fp, /* I - File to read from */
*lineptr++ = ch;
if (ch == '\"')
endquote = !endquote;
{
endquote = !endquote;
if (!endquote)
{
/*
* End of quoted string; ignore trailing characters...
*/
while ((ch = getc(fp)) != EOF)
if (ch == '\n')
break;
else if (ch == '\r')
{
ch = getc(fp);
if (ch != '\n')
ungetc(ch, fp);
break;
}
break;
}
}
}
}
+1 -1
Ver Arquivo
@@ -4,7 +4,7 @@
* PostScript Printer Description definitions for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* snprintf functions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* String functions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* String definitions for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
+34 -19
Ver Arquivo
@@ -3,7 +3,7 @@
*
* HTTP test program for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -45,25 +45,20 @@ main(int argc, /* I - Number of command-line arguments */
int i; /* Looping var */
http_t *http; /* HTTP connection */
http_status_t status; /* Status of GET command */
char buffer[1024]; /* Input buffer */
char buffer[8192]; /* Input buffer */
long bytes; /* Number of bytes read */
FILE *out; /* Output file */
char host[HTTP_MAX_URI],
method[HTTP_MAX_URI],
username[HTTP_MAX_URI],
resource[HTTP_MAX_URI];
int port;
long length, total;
time_t start, current;
#define HOST "dns.easysw.com"
#define PORT 80
puts("Connecting to " HOST "...");
httpInitialize();
http = httpConnect(HOST, PORT);
if (http == NULL)
{
puts("Unable to connect to " HOST "!");
return (1);
}
puts("Connected to " HOST "...");
http = NULL;
out = stdout;
for (i = 1; i < argc; i ++)
@@ -75,22 +70,42 @@ main(int argc, /* I - Number of command-line arguments */
continue;
}
printf("Requesting file \"%s\"...\n", argv[i]);
httpSeparate(argv[i], method, username, host, &port, resource);
http = httpConnect(host, port);
if (http == NULL)
{
perror(host);
continue;
}
printf("Requesting file \"%s\"...\n", resource);
httpClearFields(http);
httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en");
httpGet(http, argv[i]);
status = httpUpdate(http);
httpGet(http, resource);
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
if (status == HTTP_OK)
puts("GET OK:");
else
printf("GET failed with status %d...\n", status);
start = time(NULL);
length = atoi(httpGetField(http, HTTP_FIELD_CONTENT_LENGTH));
total = 0;
while ((bytes = httpRead(http, buffer, sizeof(buffer))) > 0)
{
total += bytes;
fwrite(buffer, bytes, 1, out);
if (out != stdout)
printf("Read %ld bytes, %ld total...\n", bytes, ftell(out));
{
current = time(NULL);
if (current == start) current ++;
printf("\r%ld/%ld bytes (%ld bytes/sec) ", total, length,
total / (current - start));
fflush(stdout);
}
}
}
+12 -1
Ver Arquivo
@@ -3,7 +3,7 @@
*
* PPD test program for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products, all rights reserved.
* Copyright 1997-2001 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -171,6 +171,17 @@ main(int argc, /* I - Number of command-line arguments */
}
}
printf(" num_profiles = %d\n", ppd->num_profiles);
for (j = 0; j < ppd->num_profiles; j ++)
printf(" profiles[%d] = %s/%s %.3f %.3f [ %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f ]\n",
j, ppd->profiles[j].resolution, ppd->profiles[j].media_type,
ppd->profiles[j].gamma, ppd->profiles[j].density,
ppd->profiles[j].matrix[0][0], ppd->profiles[j].matrix[0][1],
ppd->profiles[j].matrix[0][2], ppd->profiles[j].matrix[1][0],
ppd->profiles[j].matrix[1][1], ppd->profiles[j].matrix[1][2],
ppd->profiles[j].matrix[2][0], ppd->profiles[j].matrix[2][1],
ppd->profiles[j].matrix[2][2]);
printf(" num_fonts = %d\n", ppd->num_fonts);
for (j = 0; j < ppd->num_fonts; j ++)
printf(" fonts[%d] = %s\n", j, ppd->fonts[j]);
+334 -88
Ver Arquivo
@@ -4,7 +4,7 @@
* User, system, and password routines for the Common UNIX Printing
* System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -24,9 +24,16 @@
*
* Contents:
*
* cupsUser() - Return the current users name.
* cupsGetPassword() - Get a password from the user...
* cupsServer() - Return the hostname of the default server...
* cupsEncryption() - Get the default encryption settings...
* cupsGetPassword() - Get a password from the user...
* cupsServer() - Return the hostname of the default server...
* cupsSetEncryption() - Set the encryption preference.
* cupsSetPasswordCB() - Set the password callback for CUPS.
* cupsSetServer() - Set the default server name...
* cupsSetUser() - Set the default user name...
* cupsUser() - Return the current users name.
* cups_get_password() - Get a password from the user...
* cups_get_line() - Get a line from a file...
*/
/*
@@ -34,11 +41,279 @@
*/
#include "cups.h"
#include <config.h>
#include "string.h"
#include <stdlib.h>
#include <ctype.h>
/*
* Local functions...
*/
static const char *cups_get_password(const char *prompt);
static char *cups_get_line(char *buf, int buflen, FILE *fp);
/*
* Local globals...
*/
static http_encryption_t cups_encryption = (http_encryption_t)-1;
static char cups_user[65] = "",
cups_server[256] = "";
static const char *(*cups_pwdcb)(const char *) = cups_get_password;
/*
* 'cupsEncryption()' - Get the default encryption settings...
*/
http_encryption_t
cupsEncryption(void)
{
FILE *fp; /* client.conf file */
char *encryption; /* CUPS_ENCRYPTION variable */
const char *home; /* Home directory of user */
static char line[1024]; /* Line from file */
/*
* First see if we have already set the encryption stuff...
*/
if (cups_encryption == (http_encryption_t)-1)
{
/*
* Then see if the CUPS_ENCRYPTION environment variable is set...
*/
if ((encryption = getenv("CUPS_ENCRYPTION")) == NULL)
{
/*
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
*/
if ((home = getenv("HOME")) != NULL)
{
snprintf(line, sizeof(line), "%s/.cupsrc", home);
fp = fopen(line, "r");
}
else
fp = NULL;
if (fp == NULL)
{
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
{
snprintf(line, sizeof(line), "%s/client.conf", home);
fp = fopen(line, "r");
}
else
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
}
encryption = "IfRequested";
if (fp != NULL)
{
/*
* Read the config file and look for a ServerName line...
*/
while (cups_get_line(line, sizeof(line), fp) != NULL)
if (strncmp(line, "Encryption ", 11) == 0)
{
/*
* Got it! Drop any trailing newline and find the name...
*/
encryption = line + strlen(line) - 1;
if (*encryption == '\n')
*encryption = '\0';
for (encryption = line + 11; isspace(*encryption); encryption ++);
break;
}
fclose(fp);
}
}
/*
* Set the encryption preference...
*/
if (strcasecmp(encryption, "never") == 0)
cups_encryption = HTTP_ENCRYPT_NEVER;
else if (strcasecmp(encryption, "always") == 0)
cups_encryption = HTTP_ENCRYPT_ALWAYS;
else if (strcasecmp(encryption, "required") == 0)
cups_encryption = HTTP_ENCRYPT_REQUIRED;
else
cups_encryption = HTTP_ENCRYPT_IF_REQUESTED;
}
return (cups_encryption);
}
/*
* 'cupsGetPassword()' - Get a password from the user...
*/
const char * /* O - Password */
cupsGetPassword(const char *prompt) /* I - Prompt string */
{
return ((*cups_pwdcb)(prompt));
}
/*
* 'cupsSetEncryption()' - Set the encryption preference.
*/
void
cupsSetEncryption(http_encryption_t e) /* I - New encryption preference */
{
cups_encryption = e;
}
/*
* 'cupsServer()' - Return the hostname of the default server...
*/
const char * /* O - Server name */
cupsServer(void)
{
FILE *fp; /* client.conf file */
char *server; /* Pointer to server name */
const char *home; /* Home directory of user */
static char line[1024]; /* Line from file */
/*
* First see if we have already set the server name...
*/
if (!cups_server[0])
{
/*
* Then see if the CUPS_SERVER environment variable is set...
*/
if ((server = getenv("CUPS_SERVER")) == NULL)
{
/*
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
*/
if ((home = getenv("HOME")) != NULL)
{
snprintf(line, sizeof(line), "%s/.cupsrc", home);
fp = fopen(line, "r");
}
else
fp = NULL;
if (fp == NULL)
{
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
{
snprintf(line, sizeof(line), "%s/client.conf", home);
fp = fopen(line, "r");
}
else
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
}
server = "localhost";
if (fp != NULL)
{
/*
* Read the config file and look for a ServerName line...
*/
while (cups_get_line(line, sizeof(line), fp) != NULL)
if (strncmp(line, "ServerName ", 11) == 0)
{
/*
* Got it! Drop any trailing newline and find the name...
*/
server = line + strlen(line) - 1;
if (*server == '\n')
*server = '\0';
for (server = line + 11; isspace(*server); server ++);
break;
}
fclose(fp);
}
}
/*
* Copy the server name over...
*/
strncpy(cups_server, server, sizeof(cups_server) - 1);
cups_server[sizeof(cups_server) - 1] = '\0';
}
return (cups_server);
}
/*
* 'cupsSetPasswordCB()' - Set the password callback for CUPS.
*/
void
cupsSetPasswordCB(const char *(*cb)(const char *)) /* I - Callback function */
{
if (cb == (const char *(*)(const char *))0)
cups_pwdcb = cups_get_password;
else
cups_pwdcb = cb;
}
/*
* 'cupsSetServer()' - Set the default server name...
*/
void
cupsSetServer(const char *server) /* I - Server name */
{
if (server)
{
strncpy(cups_server, server, sizeof(cups_server) - 1);
cups_server[sizeof(cups_server) - 1] = '\0';
}
else
cups_server[0] = '\0';
}
/*
* 'cupsSetUser()' - Set the default user name...
*/
void
cupsSetUser(const char *user) /* I - User name */
{
if (user)
{
strncpy(cups_user, user, sizeof(cups_user) - 1);
cups_user[sizeof(cups_user) - 1] = '\0';
}
else
cups_user[0] = '\0';
}
#if defined(WIN32) || defined(__EMX__)
/*
* WIN32 and OS/2 username and password stuff...
@@ -51,16 +326,19 @@
const char * /* O - User name */
cupsUser(void)
{
return ("WindowsUser");
if (!cups_user[0])
strcpy(cups_user, "WindowsUser");
return (cups_user);
}
/*
* 'cupsGetPassword()' - Get a password from the user...
* 'cups_get_password()' - Get a password from the user...
*/
const char * /* O - Password */
cupsGetPassword(const char *prompt) /* I - Prompt string */
static const char * /* O - Password */
cups_get_password(const char *prompt) /* I - Prompt string */
{
return (NULL);
}
@@ -81,35 +359,49 @@ cupsUser(void)
struct passwd *pwd; /* User/password entry */
/*
* Rewind the password file...
*/
if (!cups_user[0])
{
/*
* Rewind the password file...
*/
setpwent();
setpwent();
/*
* Lookup the password entry for the current user.
*/
/*
* Lookup the password entry for the current user.
*/
if ((pwd = getpwuid(getuid())) == NULL)
return ("unknown"); /* Unknown user! */
if ((pwd = getpwuid(getuid())) == NULL)
strcpy(cups_user, "unknown"); /* Unknown user! */
else
{
/*
* Copy the username...
*/
/*
* Rewind the password file again and return the username...
*/
setpwent();
setpwent();
strncpy(cups_user, pwd->pw_name, sizeof(cups_user) - 1);
cups_user[sizeof(cups_user) - 1] = '\0';
}
return (pwd->pw_name);
/*
* Rewind the password file again...
*/
setpwent();
}
return (cups_user);
}
/*
* 'cupsGetPassword()' - Get a password from the user...
* 'cups_get_password()' - Get a password from the user...
*/
const char * /* O - Password */
cupsGetPassword(const char *prompt) /* I - Prompt string */
static const char * /* O - Password */
cups_get_password(const char *prompt) /* I - Prompt string */
{
return (getpass(prompt));
}
@@ -117,82 +409,36 @@ cupsGetPassword(const char *prompt) /* I - Prompt string */
/*
* 'cupsServer()' - Return the hostname of the default server...
* 'cups_get_line()' - Get a line from a file.
*/
const char * /* O - Server name */
cupsServer(void)
static char * /* O - Line from file */
cups_get_line(char *buf, /* I - Line buffer */
int buflen, /* I - Size of line buffer */
FILE *fp) /* I - File to read from */
{
FILE *fp; /* client.conf file */
char *server; /* Pointer to server name */
const char *home; /* Home directory of user */
static char line[1024]; /* Line from file */
char *bufptr; /* Pointer to end of buffer */
/*
* First see if the CUPS_SERVER environment variable is set...
* Get the line from a file...
*/
if ((server = getenv("CUPS_SERVER")) != NULL)
return (server);
if (fgets(buf, buflen, fp) == NULL)
return (NULL);
/*
* Next check to see if we have a $HOME/.cupsrc or client.conf file...
* Remove all trailing whitespace...
*/
if ((home = getenv("HOME")) != NULL)
{
snprintf(line, sizeof(line), "%s/.cupsrc", home);
fp = fopen(line, "r");
}
else
fp = NULL;
bufptr = buf + strlen(buf) - 1;
if (bufptr < buf)
return (NULL);
if (fp == NULL)
{
if ((home = getenv("CUPS_SERVERROOT")) != NULL)
{
snprintf(line, sizeof(line), "%s/client.conf", home);
fp = fopen(line, "r");
}
else
fp = fopen(CUPS_SERVERROOT "/client.conf", "r");
}
while (isspace(*bufptr) && bufptr >= buf)
*bufptr-- = '\0';
if (fp == NULL)
return ("localhost");
/*
* Read the config file and look for a ServerName line...
*/
while (fgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "ServerName ", 11) == 0)
{
/*
* Got it! Drop any trailing newline and find the name...
*/
server = line + strlen(line) - 1;
if (*server == '\n')
*server = '\0';
for (server = line + 11; isspace(*server); server ++);
if (*server)
{
fclose(fp);
return (server);
}
}
/*
* Didn't see a ServerName line, so return "localhost"...
*/
fclose(fp);
return ("localhost");
return (buf);
}
+162 -267
Ver Arquivo
@@ -3,7 +3,7 @@
*
* Printing utilities for the Common UNIX Printing System (CUPS).
*
* Copyright 1997-2000 by Easy Software Products.
* Copyright 1997-2001 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Easy Software Products and are protected by Federal
@@ -177,6 +177,7 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
nonce[HTTP_MAX_VALUE], /* nonce="xyz" string */
plain[255], /* Plaintext username:password */
encode[255]; /* Encoded username:password */
char prompt[1024]; /* Prompt string */
if (http == NULL || request == NULL || resource == NULL)
@@ -188,7 +189,7 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
return (NULL);
}
DEBUG_printf(("cupsDoFileRequest(%08x, %08s, \'%s\', \'%s\')\n",
DEBUG_printf(("cupsDoFileRequest(%p, %08x, \'%s\', \'%s\')\n",
http, request, resource, filename ? filename : "(null)"));
/*
@@ -308,10 +309,10 @@ cupsDoFileRequest(http_t *http, /* I - HTTP connection to server */
* Nope - get a password from the user...
*/
printf("Authentication required for %s on %s...\n", cupsUser(),
http->hostname);
snprintf(prompt, sizeof(prompt), "Password for %s on %s? ", cupsUser(),
http->hostname);
if ((password = cupsGetPassword("UNIX Password: ")) != NULL)
if ((password = cupsGetPassword(prompt)) != NULL)
{
/*
* Got a password; send it to the server...
@@ -466,6 +467,7 @@ cupsGetClasses(char ***classes) /* O - Classes */
*
* attributes-charset
* attributes-natural-language
* requested-attributes
*/
request = ippNew();
@@ -481,6 +483,9 @@ cupsGetClasses(char ***classes) /* O - Classes */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "printer-name");
/*
* Do the request and get back a response...
*/
@@ -540,9 +545,6 @@ cupsGetClasses(char ***classes) /* O - Classes */
const char * /* O - Default printer or NULL */
cupsGetDefault(void)
{
FILE *fp; /* cupsd.conf file */
char *printer; /* Pointer to server name */
char line[1024]; /* Line from file */
ipp_t *request, /* IPP Request */
*response; /* IPP Response */
ipp_attribute_t *attr; /* Current attribute */
@@ -563,48 +565,6 @@ cupsGetDefault(void)
else if ((var = getenv("PRINTER")) != NULL && strcmp(var, "lp") != 0)
return (var);
/*
* Next check to see if we have a client.conf file...
*/
if ((var = getenv("CUPS_SERVERROOT")) != NULL)
snprintf(line, sizeof(line), "%s/client.conf", var);
else
strcpy(line, CUPS_SERVERROOT "/client.conf");
if ((fp = fopen(line, "r")) != NULL)
{
/*
* Read the client.conf file and look for a DefaultPrinter line...
*/
while (fgets(line, sizeof(line), fp) != NULL)
if (strncmp(line, "DefaultPrinter ", 15) == 0)
{
/*
* Got it! Drop any trailing newline and find the name...
*/
printer = line + strlen(line) - 1;
if (*printer == '\n')
*printer = '\0';
for (printer = line + 15; isspace(*printer); printer ++);
if (*printer)
{
strncpy(def_printer, printer, sizeof(def_printer) - 1);
def_printer[sizeof(def_printer) - 1] = '\0';
fclose(fp);
return (def_printer);
}
}
fclose(fp);
}
/*
* Try to connect to the server...
*/
@@ -668,6 +628,7 @@ cupsGetDefault(void)
const char * /* O - Filename for PPD file */
cupsGetPPD(const char *name) /* I - Printer name */
{
int i; /* Looping var */
ipp_t *request, /* IPP request */
*response; /* IPP response */
ipp_attribute_t *attr; /* Current attribute */
@@ -687,7 +648,14 @@ cupsGetPPD(const char *name) /* I - Printer name */
plain[255], /* Plaintext username:password */
encode[255]; /* Encoded username:password */
http_status_t status; /* HTTP status from server */
char prompt[1024]; /* Prompt string */
static char filename[HTTP_MAX_URI]; /* Local filename */
static const char *requested_attrs[] =/* Requested attributes */
{
"printer-uri-supported",
"printer-type",
"member-uris"
};
if (name == NULL)
@@ -706,81 +674,112 @@ cupsGetPPD(const char *name) /* I - Printer name */
return (NULL);
}
if (strchr(name, '@') == NULL)
/*
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
* requested-attributes
*/
request = ippNew();
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
snprintf(buffer, sizeof(buffer), "ipp://localhost/printers/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, buffer);
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
"requested-attributes",
sizeof(requested_attrs) / sizeof(requested_attrs[0]),
NULL, requested_attrs);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(cups_server, request, "/")) != NULL)
{
/*
* Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
* attributes:
*
* attributes-charset
* attributes-natural-language
* printer-uri
*/
last_error = response->request.status.status_code;
printer[0] = '\0';
hostname[0] = '\0';
request = ippNew();
request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
request->request.op.request_id = 1;
language = cupsLangDefault();
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
"attributes-charset", NULL, cupsLangEncoding(language));
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
snprintf(buffer, sizeof(buffer), "ipp://localhost/printers/%s", name);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, buffer);
/*
* Do the request and get back a response...
*/
if ((response = cupsDoRequest(cups_server, request, "/")) != NULL)
if ((attr = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL)
{
last_error = response->request.status.status_code;
/*
* Get the first actual server and printer name in the class...
*/
if ((attr = ippFindAttribute(response, "printer-uri-supported",
IPP_TAG_URI)) != NULL)
for (i = 0; i < attr->num_values; i ++)
{
/*
* Get the actual server and printer names...
*/
httpSeparate(attr->values[0].string.text, method, username, hostname,
httpSeparate(attr->values[0].string.text, method, username, hostname,
&port, resource);
strcpy(printer, strrchr(resource, '/') + 1);
if (strncmp(resource, "/printers/", 10) == 0)
{
/*
* Found a printer!
*/
/*
* Remap local hostname to localhost...
*/
gethostname(buffer, sizeof(buffer));
if (strcasecmp(buffer, hostname) == 0)
strcpy(hostname, "localhost");
strncpy(printer, resource + 10, sizeof(printer) - 1);
printer[sizeof(printer) - 1] = '\0';
break;
}
}
}
else if ((attr = ippFindAttribute(response, "printer-uri-supported",
IPP_TAG_URI)) != NULL)
{
/*
* Get the actual server and printer names...
*/
ippDelete(response);
httpSeparate(attr->values[0].string.text, method, username, hostname,
&port, resource);
strncpy(printer, strrchr(resource, '/') + 1, sizeof(printer) - 1);
printer[sizeof(printer) - 1] = '\0';
}
cupsLangFree(language);
ippDelete(response);
/*
* Reconnect to the correct server as needed...
* Remap local hostname to localhost...
*/
if (strcasecmp(cups_server->hostname, hostname) != 0)
{
httpClose(cups_server);
gethostname(buffer, sizeof(buffer));
if ((cups_server = httpConnect(hostname, ippPort())) == NULL)
{
last_error = IPP_SERVICE_UNAVAILABLE;
return (NULL);
}
if (strcasecmp(buffer, hostname) == 0)
strcpy(hostname, "localhost");
}
cupsLangFree(language);
if (!printer[0])
return (NULL);
/*
* Reconnect to the correct server as needed...
*/
if (strcasecmp(cups_server->hostname, hostname) != 0)
{
httpClose(cups_server);
if ((cups_server = httpConnect(hostname, ippPort())) == NULL)
{
last_error = IPP_SERVICE_UNAVAILABLE;
return (NULL);
}
}
@@ -831,10 +830,10 @@ cupsGetPPD(const char *name) /* I - Printer name */
* Nope, get a password from the user...
*/
printf("Authentication required for %s on %s...\n", cupsUser(),
cups_server->hostname);
snprintf(prompt, sizeof(prompt), "Password for %s on %s? ", cupsUser(),
cups_server->hostname);
if ((password = cupsGetPassword("UNIX Password: ")) != NULL)
if ((password = cupsGetPassword(prompt)) != NULL)
{
/*
* Got a password; send it to the server...
@@ -880,7 +879,6 @@ cupsGetPPD(const char *name) /* I - Printer name */
* OK, we need to copy the file; open the file and copy it...
*/
unlink(filename);
if ((fp = fopen(filename, "w")) == NULL)
{
/*
@@ -939,6 +937,7 @@ cupsGetPrinters(char ***printers) /* O - Printers */
*
* attributes-charset
* attributes-natural-language
* requested-attributes
*/
request = ippNew();
@@ -954,6 +953,9 @@ cupsGetPrinters(char ***printers) /* O - Printers */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, language->language);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
"requested-attributes", NULL, "printer-name");
/*
* Do the request and get back a response...
*/
@@ -1028,8 +1030,8 @@ cupsPrintFile(const char *name, /* I - Printer or class name */
int num_options,/* I - Number of options */
cups_option_t *options) /* I - Options */
{
DEBUG_printf(("cupsPrintFile(\'%s\', \'%s\', %d, %08x)\n",
printer, filename, num_options, options));
DEBUG_printf(("cupsPrintFile(\'%s\', \'%s\', %d, %p)\n",
name, filename, num_options, options));
return (cupsPrintFiles(name, 1, &filename, title, num_options, options));
}
@@ -1048,9 +1050,6 @@ cupsPrintFiles(const char *name, /* I - Printer or class name */
cups_option_t *options) /* I - Options */
{
int i; /* Looping var */
int n, n2; /* Attribute values */
char *option, /* Name of option */
*s; /* Pointer into option value */
const char *val; /* Pointer to option value */
ipp_t *request; /* IPP request */
ipp_t *response; /* IPP response */
@@ -1062,8 +1061,8 @@ cupsPrintFiles(const char *name, /* I - Printer or class name */
int jobid; /* New job ID */
DEBUG_printf(("cupsPrintFiles(\'%s\', %d, %p, %d, %08x)\n",
printer, num_files, files, num_options, options));
DEBUG_printf(("cupsPrintFiles(\'%s\', %d, %p, %d, %p)\n",
name, num_files, files, num_options, options));
if (name == NULL || num_files < 1 || files == NULL)
return (0);
@@ -1106,20 +1105,6 @@ cupsPrintFiles(const char *name, /* I - Printer or class name */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
NULL, uri);
/*
* Handle raw print files...
*/
if (cupsGetOption("raw", num_options, options))
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/vnd.cups-raw");
else if ((val = cupsGetOption("document-format", num_options, options)) != NULL)
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, val);
else
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
NULL, "application/octet-stream");
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
NULL, cupsUser());
@@ -1127,129 +1112,10 @@ cupsPrintFiles(const char *name, /* I - Printer or class name */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, title);
/*
* Then add all options on the command-line...
* Then add all options...
*/
for (i = 0; i < num_options; i ++)
{
/*
* Skip the "raw" option - handled above...
*/
if (strcasecmp(options[i].name, "raw") == 0 ||
strcasecmp(options[i].name, "document-format") == 0)
continue;
/*
* See what the option value is; for compatibility with older interface
* scripts, we have to support single-argument options as well as
* option=value, option=low-high, and option=MxN.
*/
option = options[i].name;
val = options[i].value;
if (*val == '\0')
val = NULL;
if (val != NULL)
{
if (strcasecmp(val, "true") == 0 ||
strcasecmp(val, "on") == 0 ||
strcasecmp(val, "yes") == 0)
{
/*
* Boolean value - true...
*/
n = 1;
val = "";
}
else if (strcasecmp(val, "false") == 0 ||
strcasecmp(val, "off") == 0 ||
strcasecmp(val, "no") == 0)
{
/*
* Boolean value - false...
*/
n = 0;
val = "";
}
n = strtol(val, &s, 0);
}
else
{
if (strncasecmp(option, "no", 2) == 0)
{
option += 2;
n = 0;
}
else
n = 1;
s = "";
}
if (*s != '\0' && *s != '-' && (*s != 'x' || s == val))
{
/*
* String value(s)...
*/
DEBUG_printf(("cupsPrintFile: Adding string option \'%s\' with value \'%s\'...\n",
option, val));
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
}
else if (val != NULL)
{
/*
* Numeric value, range, or resolution...
*/
if (*s == '-')
{
n2 = strtol(s + 1, NULL, 0);
ippAddRange(request, IPP_TAG_JOB, option, n, n2);
DEBUG_printf(("cupsPrintFile: Adding range option \'%s\' with value %d-%d...\n",
option, n, n2));
}
else if (*s == 'x')
{
n2 = strtol(s + 1, &s, 0);
if (strcasecmp(s, "dpc") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_CM, n, n2);
else if (strcasecmp(s, "dpi") == 0)
ippAddResolution(request, IPP_TAG_JOB, option, IPP_RES_PER_INCH, n, n2);
else
ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, option, NULL, val);
DEBUG_printf(("cupsPrintFile: Adding resolution option \'%s\' with value %s...\n",
option, val));
}
else
{
ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, option, n);
DEBUG_printf(("cupsPrintFile: Adding integer option \'%s\' with value %d...\n",
option, n));
}
}
else
{
/*
* Boolean value...
*/
DEBUG_printf(("cupsPrintFile: Adding boolean option \'%s\' with value %d...\n",
option, n));
ippAddBoolean(request, IPP_TAG_JOB, option, (char)n);
}
}
cupsEncodeOptions(request, num_options, options);
/*
* Do the request...
@@ -1360,8 +1226,13 @@ cupsTempFile(char *filename, /* I - Pointer to buffer */
int len) /* I - Size of buffer */
{
int fd; /* File descriptor for temp file */
#ifdef WIN32
char tmpdir[1024]; /* Windows temporary directory */
DWORD curtime; /* Current time */
#else
char *tmpdir; /* TMPDIR environment var */
struct timeval curtime; /* Current time */
#endif /* WIN32 */
static char buf[1024] = ""; /* Buffer if you pass in NULL and 0 */
@@ -1379,11 +1250,11 @@ cupsTempFile(char *filename, /* I - Pointer to buffer */
* See if TMPDIR is defined...
*/
#ifdef WIN32
GetTempPath(sizeof(tmpdir), tmpdir);
#else
if ((tmpdir = getenv("TMPDIR")) == NULL)
{
#ifdef WIN32
tmpdir = "C:/WINDOWS/TEMP";
#else
/*
* Put root temp files in restricted temp directory...
*/
@@ -1392,8 +1263,8 @@ cupsTempFile(char *filename, /* I - Pointer to buffer */
tmpdir = CUPS_REQUESTS "/tmp";
else
tmpdir = "/var/tmp";
#endif /* WIN32 */
}
#endif /* WIN32 */
/*
* Make the temporary name using the specified directory...
@@ -1401,6 +1272,19 @@ cupsTempFile(char *filename, /* I - Pointer to buffer */
do
{
#ifdef WIN32
/*
* Get the current time of day...
*/
curtime = GetTickCount();
/*
* Format a string using the hex time values...
*/
snprintf(filename, len - 1, "%s/%08lx", tmpdir, curtime);
#else
/*
* Get the current time of day...
*/
@@ -1411,8 +1295,9 @@ cupsTempFile(char *filename, /* I - Pointer to buffer */
* Format a string using the hex time values...
*/
snprintf(filename, len, "%s/%08x%05x", tmpdir,
snprintf(filename, len - 1, "%s/%08lx%05lx", tmpdir,
curtime.tv_sec, curtime.tv_usec);
#endif /* WIN32 */
/*
* Open the file in "exclusive" mode, making sure that we don't
@@ -1498,7 +1383,10 @@ cups_connect(const char *name, /* I - Destination (printer[@host]) */
return (NULL);
}
else
{
httpEncryption(cups_server, cupsEncryption());
return (printer);
}
}
@@ -1517,10 +1405,11 @@ cups_local_auth(http_t *http) /* I - Connection */
return (0);
#else
int pid; /* Current process ID */
FILE *fp; /* Certificate file */
char filename[1024], /* Certificate filename */
certificate[33]; /* Certificate string */
int pid; /* Current process ID */
FILE *fp; /* Certificate file */
char filename[1024], /* Certificate filename */
certificate[33];/* Certificate string */
const char *root; /* Server root directory */
/*
@@ -1536,10 +1425,16 @@ cups_local_auth(http_t *http) /* I - Connection */
* try the root certificate...
*/
if ((root = getenv("CUPS_SERVERROOT")) == NULL)
root = CUPS_SERVERROOT;
pid = getpid();
sprintf(filename, CUPS_SERVERROOT "/certs/%d", pid);
snprintf(filename, sizeof(filename), "%s/certs/%d", root, pid);
if ((fp = fopen(filename, "r")) == NULL && pid > 0)
fp = fopen(CUPS_SERVERROOT "/certs/0", "r");
{
snprintf(filename, sizeof(filename), "%s/certs/0", root);
fp = fopen(filename, "r");
}
if (fp == NULL)
return (0);
@@ -1555,7 +1450,7 @@ cups_local_auth(http_t *http) /* I - Connection */
* Set the authorization string and return...
*/
sprintf(authstring, "Local %s", certificate);
snprintf(authstring, sizeof(authstring), "Local %s", certificate);
return (1);
#endif /* WIN32 || __EMX__ */
+6 -2
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Datafile makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1993-2000 by Easy Software Products.
# Copyright 1993-2001 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
@@ -94,7 +94,11 @@ install:
-if test "$(PAMDIR)" != ""; then \
$(MKDIR) $(PAMDIR); \
$(CHMOD) ugo+rx $(PAMDIR); \
$(INSTALL_DATA) cups.pam $(PAMDIR)/cups; \
if test -f /lib/security/pam_unix.so; then \
$(INSTALL_DATA) cups.suse $(PAMDIR)/cups; \
else \
$(INSTALL_DATA) cups.pam $(PAMDIR)/cups; \
fi \
fi
+33 -25
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER \{ % Draw centered text
/CENTER { % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT \{ % Draw right-justified text
/RIGHT { % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER \{ % Draw a number
/NUMBER { % Draw a number
% power n NUMBER -
1 index 1 eq \{ % power == 1?
1 index 1 eq { % power == 1?
round cvi exch pop % Convert "n" to integer
} \{
} {
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO \{ % Draw the CUPS logo
/CUPSLOGO { % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO \{ % Draw the ESP logo
/ESPLOGO { % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 \{
1 -0.001 0 {
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,14 +151,20 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -170,28 +176,30 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -9 mul add % - 1 line
pageWidth -7 mul add % - 2 lines
moveto % Position text
bigFont setfont % Font
(Classified) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageWidth 8 mul % Bottom of page
pageHeight 6 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Classified) CENTER % Show text centered
% Job information box...
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -201,7 +209,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 4 mul add % y += 2 lines
pageHeight 5 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -210,7 +218,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 1 mul add % y += 1 line
pageHeight 2 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -219,7 +227,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -2 mul add % y -= 1 line
pageHeight -1 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -228,7 +236,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -5 mul add % y -= 2 lines
pageHeight -4 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -254,6 +262,6 @@ gsave
grestore
showpage
%
% End of "$Id: classified 1075 2000-05-11 20:02:21Z mike $".
% End of "$Id: classified 1379 2000-09-18 17:12:42Z mike $".
%
%%EOF
+33 -25
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER \{ % Draw centered text
/CENTER { % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT \{ % Draw right-justified text
/RIGHT { % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER \{ % Draw a number
/NUMBER { % Draw a number
% power n NUMBER -
1 index 1 eq \{ % power == 1?
1 index 1 eq { % power == 1?
round cvi exch pop % Convert "n" to integer
} \{
} {
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO \{ % Draw the CUPS logo
/CUPSLOGO { % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO \{ % Draw the ESP logo
/ESPLOGO { % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 \{
1 -0.001 0 {
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,14 +151,20 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -170,28 +176,30 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -9 mul add % - 1 line
pageWidth -7 mul add % - 2 lines
moveto % Position text
bigFont setfont % Font
(Confidential) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageWidth 8 mul % Bottom of page
pageHeight 6 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Confidential) CENTER % Show text centered
% Job information box...
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -201,7 +209,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 4 mul add % y += 2 lines
pageHeight 5 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -210,7 +218,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 1 mul add % y += 1 line
pageHeight 2 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -219,7 +227,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -2 mul add % y -= 1 line
pageHeight -1 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -228,7 +236,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -5 mul add % y -= 2 lines
pageHeight -4 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -254,6 +262,6 @@ gsave
grestore
showpage
%
% End of "$Id: confidential 1075 2000-05-11 20:02:21Z mike $".
% End of "$Id: confidential 1379 2000-09-18 17:12:42Z mike $".
%
%%EOF
+2
Ver Arquivo
@@ -0,0 +1,2 @@
auth required /lib/security/pam_unix.so nullok shadow
account required /lib/security/pam_unix.so
+33 -25
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER \{ % Draw centered text
/CENTER { % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT \{ % Draw right-justified text
/RIGHT { % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER \{ % Draw a number
/NUMBER { % Draw a number
% power n NUMBER -
1 index 1 eq \{ % power == 1?
1 index 1 eq { % power == 1?
round cvi exch pop % Convert "n" to integer
} \{
} {
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO \{ % Draw the CUPS logo
/CUPSLOGO { % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO \{ % Draw the ESP logo
/ESPLOGO { % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 \{
1 -0.001 0 {
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,14 +151,20 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -170,28 +176,30 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -9 mul add % - 1 line
pageWidth -7 mul add % - 2 lines
moveto % Position text
bigFont setfont % Font
(Secret) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageWidth 8 mul % Bottom of page
pageHeight 6 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Secret) CENTER % Show text centered
% Job information box...
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -201,7 +209,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 4 mul add % y += 2 lines
pageHeight 5 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -210,7 +218,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 1 mul add % y += 1 line
pageHeight 2 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -219,7 +227,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -2 mul add % y -= 1 line
pageHeight -1 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -228,7 +236,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -5 mul add % y -= 2 lines
pageHeight -4 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -254,6 +262,6 @@ gsave
grestore
showpage
%
% End of "$Id: secret 1075 2000-05-11 20:02:21Z mike $".
% End of "$Id: secret 1379 2000-09-18 17:12:42Z mike $".
%
%%EOF
+31 -39
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER \{ % Draw centered text
/CENTER { % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT \{ % Draw right-justified text
/RIGHT { % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER \{ % Draw a number
/NUMBER { % Draw a number
% power n NUMBER -
1 index 1 eq \{ % power == 1?
1 index 1 eq { % power == 1?
round cvi exch pop % Convert "n" to integer
} \{
} {
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO \{ % Draw the CUPS logo
/CUPSLOGO { % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO \{ % Draw the ESP logo
/ESPLOGO { % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 \{
1 -0.001 0 {
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,47 +151,39 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
% Offset page to account for lower-left margin...
pageLeft 72 mul
pageBottom 72 mul
translate
% Draw the label at the top and bottom...
0 setgray % Color
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -9 mul add % - 1 line
moveto % Position text
bigFont setfont % Font
(Banner) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageWidth 8 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Banner) CENTER % Show text centered
% Job information box...
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -201,7 +193,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 4 mul add % y += 2 lines
pageHeight 5 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -210,7 +202,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 1 mul add % y += 1 line
pageHeight 2 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -219,7 +211,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -2 mul add % y -= 1 line
pageHeight -1 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -228,7 +220,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -5 mul add % y -= 2 lines
pageHeight -4 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -254,6 +246,6 @@ gsave
grestore
showpage
%
% End of "$Id: standard 1075 2000-05-11 20:02:21Z mike $".
% End of "$Id: standard 1379 2000-09-18 17:12:42Z mike $".
%
%%EOF
+34 -27
Ver Arquivo
@@ -213,15 +213,22 @@ gsave
/yResolution exch abs def % yResolution = abs(yres)
/xResolution exch abs def % xResolution = abs(xres)
% Figure out the sizes of things...
/wheelSize % size of wheels
pageWidth pageHeight lt
{ pageWidth 9 mul }
{ pageHeight 7 mul }
ifelse def
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
/smallFont /Times-Roman findfont % smallFont = Times-Roman
pageWidth 1.5 mul scalefont def % size = pageWidth * 1.5 (nominally 13)
pageHeight scalefont def % size = pageHeight (nominally 11)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -239,7 +246,7 @@ gsave
translate
% Size the wheel...
pageWidth 9 mul % radius = pageWidth * 1/8 * 72
wheelSize
% Draw the colors...
dup (C) exch 0 1 1 OCTANT 45 rotate
@@ -268,7 +275,7 @@ gsave
translate
% Size the wheel...
pageWidth 9 mul % radius = pageWidth * 1/8 * 72
wheelSize
% Loop at 1 degree increments
0 1 359 {
@@ -290,7 +297,7 @@ gsave
(1 Degree Radial Lines) CENTER % Show the text centered
% Imageable area...
pageWidth 19.5 mul % Height of imageable area
pageHeight 15 mul % Height of imageable area
pageWidth 4.5 mul % x = pageWidth * 1/16 * 72
pageHeight 35.5 mul % y = pageHeight * 1/2 * 72
@@ -319,7 +326,7 @@ gsave
smallFont setfont % Font
pageWidth 14 mul % x = pageWidth * 3/16 * 72
pageHeight 36 mul % y = pageWidth * 1/2 * 72
pageWidth -3 mul add % y -= 2 * smallFont height
pageHeight -2 mul add % y -= 2 * smallFont height
% Page Size inches
2 copy moveto % Move to x & y
@@ -330,7 +337,7 @@ gsave
(in) show % "in"
% Page Size millimeters
pageWidth -1.5 mul add % Move down...
pageHeight sub % Move down...
2 copy moveto % Move to x & y
10 pageWidth 25.4 mul NUMBER % pageWidth
@@ -339,7 +346,7 @@ gsave
(mm) show % "mm"
% Lower-left inches
pageWidth -3 mul add % Move down...
pageHeight 2 mul sub % Move down...
2 copy moveto % Move to x & y
(Lower-Left: ) RIGHT % Label
@@ -349,7 +356,7 @@ gsave
(in) show % "in"
% Lower-left millimeters
pageWidth -1.5 mul add % Move down...
pageHeight sub % Move down...
2 copy moveto % Move to x & y
10 pageLeft 25.4 mul NUMBER % pageLeft
@@ -358,7 +365,7 @@ gsave
(mm) show % "mm"
% Upper-right inches
pageWidth -3 mul add % Move down...
pageHeight 2 mul sub % Move down...
2 copy moveto % Move to x & y
(Upper-Right: ) RIGHT % Label
@@ -368,7 +375,7 @@ gsave
(in) show % "in"
% Upper-right millimeters
pageWidth -1.5 mul add % Move down...
pageHeight sub % Move down...
2 copy moveto % Move to x & y
10 pageRight 25.4 mul NUMBER % pageRight
@@ -377,7 +384,7 @@ gsave
(mm) show % "mm"
% Resolution dots-per-inch
pageWidth -3 mul add % Move down...
pageHeight 2 mul sub % Move down...
2 copy moveto % Move to x & y
(Resolution: ) RIGHT % Label
@@ -387,7 +394,7 @@ gsave
(dpi) show % "dpi"
% Resolution dots-per-meter
pageWidth -1.5 mul add % Move down...
pageHeight sub % Move down...
moveto % Move to x & y
1 xResolution 39.27 mul NUMBER % xResolution
@@ -396,7 +403,7 @@ gsave
(dpm) show % "dpm"
% Interpreter Information...
pageWidth 19.5 mul % Height of interpreter info
pageHeight 15 mul % Height of interpreter information
pageWidth 40.5 mul % x = pageWidth * 9/16 * 72
pageHeight 35.5 mul % y = pageHeight * 1/2 * 72
@@ -425,7 +432,7 @@ gsave
smallFont setfont % Font
pageWidth 49 mul % x = pageWidth * 11/16 * 72
pageHeight 36 mul % y = pageWidth * 1/2 * 72
pageWidth -3 mul add % y -= 2 * smallFont height
pageHeight 2 mul sub % y -= 2 * smallFont height
% Language level
2 copy moveto % Move to x & y
@@ -434,7 +441,7 @@ gsave
1 languagelevel NUMBER % Language level
% Version
pageWidth -3 mul add % Move down...
pageHeight 2 mul sub % Move down...
2 copy moveto % Move to x & y
(Version: ) RIGHT % Label
version show % Version
@@ -443,13 +450,13 @@ gsave
(\)) show % ")"
% Product
pageWidth -3 mul add % Move down...
pageHeight 2 mul sub % Move down...
2 copy moveto % Move to x & y
(Product: ) RIGHT % Label
product show % Product name
% Serial Number
pageWidth -3 mul add % Move down...
pageHeight 2 mul sub % Move down...
2 copy moveto % Move to x & y
(Serial #: ) RIGHT % Label
1 serialnumber NUMBER % S/N
@@ -463,28 +470,28 @@ gsave
% Draw the copyright notice at the bottom...
pageWidth 36 mul % Center of page
pageWidth 14 mul % Bottom of page
pageHeight 10 mul % Bottom of page
2 copy moveto % Position text
(Printed Using CUPS v1.1.x) CENTER % Show text centered
pageWidth 3 mul sub % Move down...
pageHeight 2 mul sub % Move down...
2 copy moveto % Position text
smallFont setfont % Font
(Copyright 1993-2000 Easy Software Products, All Rights Reserved.) CENTER
pageWidth 1.5 mul sub % Move down...
pageHeight sub % Move down...
2 copy moveto % Position text
(CUPS, and the CUPS logo are the trademark property of) CENTER
pageWidth 1.5 mul sub % Move down...
pageHeight sub % Move down...
2 copy moveto % Position text
(Easy Software Products, 44141 Airport View Drive, Suite 204,) CENTER
pageWidth 1.5 mul sub % Move down...
pageHeight sub % Move down...
2 copy moveto % Position text
(Hollywood, Maryland, 20636-3111, USA.) CENTER
% Then the CUPS logo....
gsave
pageWidth 4 mul
pageWidth 6 mul
pageHeight 4 mul
translate
pageWidth 9 mul CUPSLOGO
grestore
@@ -492,7 +499,7 @@ gsave
% And the ESP logo....
gsave
pageWidth 59 mul
pageWidth 6 mul
pageHeight 4 mul
translate
pageWidth 6 mul ESPLOGO
grestore
@@ -500,6 +507,6 @@ gsave
grestore
showpage
%
% End of "$Id: testprint.ps 1260 2000-08-01 17:52:30Z mike $".
% End of "$Id: testprint.ps 1379 2000-09-18 17:12:42Z mike $".
%
%%EOF
+33 -25
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER \{ % Draw centered text
/CENTER { % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT \{ % Draw right-justified text
/RIGHT { % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER \{ % Draw a number
/NUMBER { % Draw a number
% power n NUMBER -
1 index 1 eq \{ % power == 1?
1 index 1 eq { % power == 1?
round cvi exch pop % Convert "n" to integer
} \{
} {
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO \{ % Draw the CUPS logo
/CUPSLOGO { % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO \{ % Draw the ESP logo
/ESPLOGO { % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 \{
1 -0.001 0 {
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,14 +151,20 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -170,28 +176,30 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -9 mul add % - 1 line
pageWidth -7 mul add % - 2 lines
moveto % Position text
bigFont setfont % Font
(Top Secret) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageWidth 8 mul % Bottom of page
pageHeight 6 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Top Secret) CENTER % Show text centered
% Job information box...
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -201,7 +209,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 4 mul add % y += 2 lines
pageHeight 5 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -210,7 +218,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 1 mul add % y += 1 line
pageHeight 2 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -219,7 +227,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -2 mul add % y -= 1 line
pageHeight -1 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -228,7 +236,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -5 mul add % y -= 2 lines
pageHeight -4 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -254,6 +262,6 @@ gsave
grestore
showpage
%
% End of "$Id: topsecret 1075 2000-05-11 20:02:21Z mike $".
% End of "$Id: topsecret 1379 2000-09-18 17:12:42Z mike $".
%
%%EOF
+33 -25
Ver Arquivo
@@ -22,28 +22,28 @@
% to third parties or copied or duplicated in any form, in whole or
% in part, without the prior written consent of Easy Software Products.
%
/CENTER \{ % Draw centered text
/CENTER { % Draw centered text
% (name) CENTER -
dup stringwidth pop % Get the width of the string
0.5 mul neg 0 rmoveto % Shift left 1/2 of the distance
show % Show the string
} bind def
/RIGHT \{ % Draw right-justified text
/RIGHT { % Draw right-justified text
% (name) RIGHT -
dup stringwidth pop % Get the width of the string
neg 0 rmoveto % Shift left the entire distance
show % Show the string
} bind def
/NUMBER \{ % Draw a number
/NUMBER { % Draw a number
% power n NUMBER -
1 index 1 eq \{ % power == 1?
1 index 1 eq { % power == 1?
round cvi exch pop % Convert "n" to integer
} \{
} {
1 index mul round exch div % Truncate extra decimal places
} ifelse
100 string cvs show % Convert to a string and show it...
} bind def
/CUPSLOGO \{ % Draw the CUPS logo
/CUPSLOGO { % Draw the CUPS logo
% height CUPSLOGO
% Start with a big C...
/Helvetica findfont 1 index scalefont setfont
@@ -61,14 +61,14 @@
dup 1.2 mul moveto
(System) show
} bind def
/ESPLOGO \{ % Draw the ESP logo
/ESPLOGO { % Draw the ESP logo
% height ESPLOGO
% Compute the size of the logo...
0 0
2 index 1.5 mul 3 index
% Do the "metallic" fill from 10% black to 40% black...
1 -0.001 0 \{
1 -0.001 0 {
dup % loopval
-0.15 mul % loopval * -0.15
0.9 add % 0.9 - loopval * 0.15
@@ -151,14 +151,20 @@ gsave
/pageWidth pageRight pageLeft sub def % pageWidth = pageRight - pageLeft
/pageHeight pageTop pageBottom sub def% pageHeight = pageTop - pageBottom
/boxWidth % width of text box
pageWidth pageHeight lt
{ pageWidth 54 mul }
{ pageHeight 42 mul }
ifelse def
newpath % Clear bounding path
% Create fonts...
/bigFont /Helvetica-Bold findfont % bigFont = Helvetica-Bold
pageWidth 4 mul scalefont def % size = pageWidth * 4 (nominally 34)
pageHeight 3 mul scalefont def % size = pageHeight * 3 (nominally 33)
/mediumFont /Helvetica findfont % mediumFont = Helvetica
pageWidth 2 mul scalefont def % size = pageWidth * 2 (nominally 17)
pageHeight 1.5 mul scalefont def % size = pageHeight * 1.5 (nominally 16.5)
% Offset page to account for lower-left margin...
pageLeft 72 mul
@@ -170,28 +176,30 @@ gsave
pageWidth 36 mul % Center of page
pageHeight 72 mul % Top of page
pageWidth -9 mul add % - 1 line
pageWidth -7 mul add % - 2 lines
moveto % Position text
bigFont setfont % Font
(Unclassified) CENTER % Show text centered
pageWidth 36 mul % Center of page
pageWidth 8 mul % Bottom of page
pageHeight 6 mul % Bottom of page
moveto % Position text
bigFont setfont % Font
(Unclassified) CENTER % Show text centered
% Job information box...
pageWidth 18 mul 9 add % x = pageWidth * 1/4 * 72 + 9
pageHeight 27 mul 9 sub % y = pageHeight * 3/8 * 72 - 9
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul 9 add % x = pageWidth * 1/2 * 72 + 9
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul 9 sub % y = pageHeight * 1/2 * 72 - 9
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
0.5 setgray rectfill % Draw a shadow
pageWidth 18 mul % x = pageWidth * 1/4 * 72
pageHeight 27 mul % y = pageHeight * 3/8 * 72
pageWidth 36 mul % w = pageWidth * 1/2 * 72
pageHeight 18 mul % h = pageHeight * 1/4 * 72
pageWidth 36 mul % x = pageWidth * 1/2 * 72
boxWidth 0.5 mul sub % x-= 1/2 box width
pageHeight 30 mul % y = pageHeight * 1/4 * 72
boxWidth % w = box width
pageHeight 14 mul % h = pageHeight * 1/2 * 72
4 copy 1 setgray rectfill % Clear the box to white
0 setgray rectstroke % Draw a black box around it...
@@ -201,7 +209,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 4 mul add % y += 2 lines
pageHeight 5 mul add % y += 2 lines
2 copy % Copy X & Y
moveto
(Job ID: ) RIGHT
@@ -210,7 +218,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth 1 mul add % y += 1 line
pageHeight 2 mul add % y += 1 line
2 copy % Copy X & Y
moveto
(Title: ) RIGHT
@@ -219,7 +227,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -2 mul add % y -= 1 line
pageHeight -1 mul add % y -= 1 line
2 copy % Copy X & Y
moveto
(Requesting User: ) RIGHT
@@ -228,7 +236,7 @@ gsave
pageWidth 36 mul % x = pageWidth * 1/2 * 72
pageHeight 36 mul % y = pageHeight * 1/2 * 72
pageWidth -5 mul add % y -= 2 lines
pageHeight -4 mul add % y -= 2 lines
2 copy % Copy X & Y
moveto
(Billing Info: ) RIGHT
@@ -254,6 +262,6 @@ gsave
grestore
showpage
%
% End of "$Id: unclassified 1075 2000-05-11 20:02:21Z mike $".
% End of "$Id: unclassified 1379 2000-09-18 17:12:42Z mike $".
%
%%EOF
+14 -2
Ver Arquivo
@@ -3,7 +3,7 @@
#
# Documentation makefile for the Common UNIX Printing System (CUPS).
#
# Copyright 1993-2000 by Easy Software Products.
# Copyright 1993-2001 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
@@ -79,6 +79,7 @@ WEBIMAGES = images/accept-jobs.gif \
images/printer-stopped.gif \
images/reject-jobs.gif \
images/release-job.gif \
images/restart-job.gif \
images/right.gif \
images/show-active.gif \
images/show-completed.gif \
@@ -208,7 +209,18 @@ sum-7x8.ps: sum.shtml
--size 7x8.5in --left 0.5in --right 0.25in \
--top 0.25in --bottom 0.25in --fontsize 10 --headfootsize 10 -f $@ sum.shtml
$(DOCUMENTS): glossary.shtml printing-overview.shtml \
$(DOCUMENTS:.shtml=.html): \
glossary.shtml printing-overview.shtml \
references.shtml system-overview.shtml \
../LICENSE.html
$(DOCUMENTS:.shtml=.pdf): \
glossary.shtml printing-overview.shtml \
references.shtml system-overview.shtml \
../LICENSE.html
$(DOCUMENTS:.shtml=.ps): \
glossary.shtml printing-overview.shtml \
references.shtml system-overview.shtml \
../LICENSE.html
+609 -541
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+229 -223
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 1.8.8 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20000731155313Z)/Title( CUPS Configuration Management Plan)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 1.9b1 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20001118180310Z)/Title( CUPS Configuration Management Plan)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
@@ -50,48 +50,49 @@
34 0 R
36 0 R
]endobj
38 0 obj<</Subtype/Link/Rect[72.0 670.8 107.8 683.8]/Border[0 0 0]/Dest[157 0 R/XYZ null 798 0]>>endobj
39 0 obj<</Subtype/Link/Rect[108.0 657.6 183.8 670.6]/Border[0 0 0]/Dest[157 0 R/XYZ null 745 0]>>endobj
40 0 obj<</Subtype/Link/Rect[108.0 644.4 203.0 657.4]/Border[0 0 0]/Dest[157 0 R/XYZ null 672 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 631.2 216.4 644.2]/Border[0 0 0]/Dest[157 0 R/XYZ null 467 0]>>endobj
42 0 obj<</Subtype/Link/Rect[72.0 604.8 131.6 617.8]/Border[0 0 0]/Dest[163 0 R/XYZ null 798 0]>>endobj
43 0 obj<</Subtype/Link/Rect[108.0 591.6 222.6 604.6]/Border[0 0 0]/Dest[163 0 R/XYZ null 745 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[163 0 R/XYZ null 540 0]>>endobj
45 0 obj<</Subtype/Link/Rect[72.0 552.0 162.4 565.0]/Border[0 0 0]/Dest[169 0 R/XYZ null 798 0]>>endobj
46 0 obj<</Subtype/Link/Rect[108.0 538.8 209.7 551.8]/Border[0 0 0]/Dest[169 0 R/XYZ null 745 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 525.6 179.2 538.6]/Border[0 0 0]/Dest[169 0 R/XYZ null 659 0]>>endobj
48 0 obj<</Subtype/Link/Rect[108.0 512.4 246.4 525.4]/Border[0 0 0]/Dest[169 0 R/XYZ null 599 0]>>endobj
49 0 obj<</Subtype/Link/Rect[72.0 486.0 206.7 499.0]/Border[0 0 0]/Dest[175 0 R/XYZ null 798 0]>>endobj
50 0 obj<</Subtype/Link/Rect[108.0 472.8 185.0 485.8]/Border[0 0 0]/Dest[175 0 R/XYZ null 626 0]>>endobj
51 0 obj<</Subtype/Link/Rect[108.0 459.6 183.8 472.6]/Border[0 0 0]/Dest[175 0 R/XYZ null 434 0]>>endobj
52 0 obj<</Subtype/Link/Rect[108.0 446.4 171.5 459.4]/Border[0 0 0]/Dest[175 0 R/XYZ null 308 0]>>endobj
53 0 obj<</Subtype/Link/Rect[108.0 433.2 177.7 446.2]/Border[0 0 0]/Dest[175 0 R/XYZ null 222 0]>>endobj
54 0 obj<</Subtype/Link/Rect[72.0 406.8 164.9 419.8]/Border[0 0 0]/Dest[181 0 R/XYZ null 798 0]>>endobj
55 0 obj<</Subtype/Link/Rect[108.0 393.6 212.2 406.6]/Border[0 0 0]/Dest[181 0 R/XYZ null 745 0]>>endobj
56 0 obj<</Subtype/Link/Rect[108.0 380.4 173.4 393.4]/Border[0 0 0]/Dest[181 0 R/XYZ null 325 0]>>endobj
57 0 obj<</Subtype/Link/Rect[108.0 367.2 157.5 380.2]/Border[0 0 0]/Dest[181 0 R/XYZ null 252 0]>>endobj
58 0 obj<</Subtype/Link/Rect[108.0 354.0 158.7 367.0]/Border[0 0 0]/Dest[181 0 R/XYZ null 179 0]>>endobj
59 0 obj<</Subtype/Link/Rect[72.0 327.6 124.2 340.6]/Border[0 0 0]/Dest[187 0 R/XYZ null 798 0]>>endobj
60 0 obj<</Subtype/Link/Rect[108.0 314.4 155.0 327.4]/Border[0 0 0]/Dest[187 0 R/XYZ null 745 0]>>endobj
61 0 obj<</Subtype/Link/Rect[108.0 301.2 172.8 314.2]/Border[0 0 0]/Dest[187 0 R/XYZ null 566 0]>>endobj
62 0 obj<</Subtype/Link/Rect[72.0 274.8 185.1 287.8]/Border[0 0 0]/Dest[193 0 R/XYZ null 798 0]>>endobj
63 0 obj<</Subtype/Link/Rect[108.0 261.6 181.0 274.6]/Border[0 0 0]/Dest[193 0 R/XYZ null 706 0]>>endobj
64 0 obj<</Subtype/Link/Rect[144.0 248.4 206.0 261.4]/Border[0 0 0]/Dest[193 0 R/XYZ null 657 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 235.2 238.4 248.2]/Border[0 0 0]/Dest[193 0 R/XYZ null 574 0]>>endobj
66 0 obj<</Subtype/Link/Rect[108.0 222.0 169.7 235.0]/Border[0 0 0]/Dest[196 0 R/XYZ null 737 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 208.8 206.0 221.8]/Border[0 0 0]/Dest[196 0 R/XYZ null 688 0]>>endobj
68 0 obj<</Subtype/Link/Rect[144.0 195.6 238.4 208.6]/Border[0 0 0]/Dest[196 0 R/XYZ null 566 0]>>endobj
69 0 obj<</Subtype/Link/Rect[108.0 182.4 164.8 195.4]/Border[0 0 0]/Dest[196 0 R/XYZ null 369 0]>>endobj
70 0 obj<</Subtype/Link/Rect[144.0 169.2 206.0 182.2]/Border[0 0 0]/Dest[196 0 R/XYZ null 320 0]>>endobj
71 0 obj<</Subtype/Link/Rect[144.0 156.0 238.4 169.0]/Border[0 0 0]/Dest[196 0 R/XYZ null 250 0]>>endobj
72 0 obj<</Subtype/Link/Rect[108.0 142.8 168.5 155.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 726 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 129.6 206.0 142.6]/Border[0 0 0]/Dest[199 0 R/XYZ null 678 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 116.4 238.4 129.4]/Border[0 0 0]/Dest[199 0 R/XYZ null 542 0]>>endobj
75 0 obj<</Subtype/Link/Rect[108.0 103.2 153.2 116.2]/Border[0 0 0]/Dest[199 0 R/XYZ null 452 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 90.0 206.0 103.0]/Border[0 0 0]/Dest[199 0 R/XYZ null 404 0]>>endobj
77 0 obj<</Subtype/Link/Rect[144.0 76.8 238.4 89.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 334 0]>>endobj
78 0 obj<</Subtype/Link/Rect[108.0 63.6 170.9 76.6]/Border[0 0 0]/Dest[199 0 R/XYZ null 236 0]>>endobj
79 0 obj[38 0 R
38 0 obj<</Subtype/Link/Rect[72.0 684.0 107.8 697.0]/Border[0 0 0]/Dest[157 0 R/XYZ null 798 0]>>endobj
39 0 obj<</Subtype/Link/Rect[108.0 670.8 183.8 683.8]/Border[0 0 0]/Dest[157 0 R/XYZ null 745 0]>>endobj
40 0 obj<</Subtype/Link/Rect[108.0 657.6 203.0 670.6]/Border[0 0 0]/Dest[157 0 R/XYZ null 672 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 644.4 216.4 657.4]/Border[0 0 0]/Dest[157 0 R/XYZ null 467 0]>>endobj
42 0 obj<</Subtype/Link/Rect[72.0 618.0 131.6 631.0]/Border[0 0 0]/Dest[163 0 R/XYZ null 798 0]>>endobj
43 0 obj<</Subtype/Link/Rect[108.0 604.8 222.6 617.8]/Border[0 0 0]/Dest[163 0 R/XYZ null 745 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 591.6 202.4 604.6]/Border[0 0 0]/Dest[163 0 R/XYZ null 540 0]>>endobj
45 0 obj<</Subtype/Link/Rect[72.0 565.2 162.4 578.2]/Border[0 0 0]/Dest[169 0 R/XYZ null 798 0]>>endobj
46 0 obj<</Subtype/Link/Rect[108.0 552.0 209.7 565.0]/Border[0 0 0]/Dest[169 0 R/XYZ null 745 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 538.8 179.2 551.8]/Border[0 0 0]/Dest[169 0 R/XYZ null 659 0]>>endobj
48 0 obj<</Subtype/Link/Rect[108.0 525.6 246.4 538.6]/Border[0 0 0]/Dest[169 0 R/XYZ null 599 0]>>endobj
49 0 obj<</Subtype/Link/Rect[72.0 499.2 206.7 512.2]/Border[0 0 0]/Dest[175 0 R/XYZ null 798 0]>>endobj
50 0 obj<</Subtype/Link/Rect[108.0 486.0 185.0 499.0]/Border[0 0 0]/Dest[175 0 R/XYZ null 626 0]>>endobj
51 0 obj<</Subtype/Link/Rect[108.0 472.8 183.8 485.8]/Border[0 0 0]/Dest[175 0 R/XYZ null 434 0]>>endobj
52 0 obj<</Subtype/Link/Rect[108.0 459.6 171.5 472.6]/Border[0 0 0]/Dest[175 0 R/XYZ null 308 0]>>endobj
53 0 obj<</Subtype/Link/Rect[108.0 446.4 177.7 459.4]/Border[0 0 0]/Dest[175 0 R/XYZ null 222 0]>>endobj
54 0 obj<</Subtype/Link/Rect[72.0 420.0 164.9 433.0]/Border[0 0 0]/Dest[181 0 R/XYZ null 798 0]>>endobj
55 0 obj<</Subtype/Link/Rect[108.0 406.8 212.2 419.8]/Border[0 0 0]/Dest[181 0 R/XYZ null 745 0]>>endobj
56 0 obj<</Subtype/Link/Rect[108.0 393.6 173.4 406.6]/Border[0 0 0]/Dest[181 0 R/XYZ null 325 0]>>endobj
57 0 obj<</Subtype/Link/Rect[108.0 380.4 157.5 393.4]/Border[0 0 0]/Dest[181 0 R/XYZ null 252 0]>>endobj
58 0 obj<</Subtype/Link/Rect[108.0 367.2 158.7 380.2]/Border[0 0 0]/Dest[181 0 R/XYZ null 179 0]>>endobj
59 0 obj<</Subtype/Link/Rect[72.0 340.8 124.2 353.8]/Border[0 0 0]/Dest[187 0 R/XYZ null 798 0]>>endobj
60 0 obj<</Subtype/Link/Rect[108.0 327.6 155.0 340.6]/Border[0 0 0]/Dest[187 0 R/XYZ null 745 0]>>endobj
61 0 obj<</Subtype/Link/Rect[108.0 314.4 172.8 327.4]/Border[0 0 0]/Dest[187 0 R/XYZ null 566 0]>>endobj
62 0 obj<</Subtype/Link/Rect[72.0 288.0 185.1 301.0]/Border[0 0 0]/Dest[193 0 R/XYZ null 798 0]>>endobj
63 0 obj<</Subtype/Link/Rect[108.0 274.8 181.0 287.8]/Border[0 0 0]/Dest[193 0 R/XYZ null 706 0]>>endobj
64 0 obj<</Subtype/Link/Rect[144.0 261.6 206.0 274.6]/Border[0 0 0]/Dest[193 0 R/XYZ null 657 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 248.4 238.4 261.4]/Border[0 0 0]/Dest[193 0 R/XYZ null 574 0]>>endobj
66 0 obj<</Subtype/Link/Rect[108.0 235.2 169.7 248.2]/Border[0 0 0]/Dest[196 0 R/XYZ null 737 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 222.0 206.0 235.0]/Border[0 0 0]/Dest[196 0 R/XYZ null 688 0]>>endobj
68 0 obj<</Subtype/Link/Rect[144.0 208.8 238.4 221.8]/Border[0 0 0]/Dest[196 0 R/XYZ null 566 0]>>endobj
69 0 obj<</Subtype/Link/Rect[108.0 195.6 164.8 208.6]/Border[0 0 0]/Dest[196 0 R/XYZ null 369 0]>>endobj
70 0 obj<</Subtype/Link/Rect[144.0 182.4 206.0 195.4]/Border[0 0 0]/Dest[196 0 R/XYZ null 320 0]>>endobj
71 0 obj<</Subtype/Link/Rect[144.0 169.2 238.4 182.2]/Border[0 0 0]/Dest[196 0 R/XYZ null 250 0]>>endobj
72 0 obj<</Subtype/Link/Rect[108.0 156.0 168.5 169.0]/Border[0 0 0]/Dest[199 0 R/XYZ null 726 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 142.8 206.0 155.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 678 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 129.6 238.4 142.6]/Border[0 0 0]/Dest[199 0 R/XYZ null 542 0]>>endobj
75 0 obj<</Subtype/Link/Rect[108.0 116.4 153.2 129.4]/Border[0 0 0]/Dest[199 0 R/XYZ null 452 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 103.2 206.0 116.2]/Border[0 0 0]/Dest[199 0 R/XYZ null 404 0]>>endobj
77 0 obj<</Subtype/Link/Rect[144.0 90.0 238.4 103.0]/Border[0 0 0]/Dest[199 0 R/XYZ null 334 0]>>endobj
78 0 obj<</Subtype/Link/Rect[108.0 76.8 170.9 89.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 236 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 63.6 206.0 76.6]/Border[0 0 0]/Dest[199 0 R/XYZ null 188 0]>>endobj
80 0 obj[38 0 R
39 0 R
40 0 R
41 0 R
@@ -132,21 +133,20 @@
76 0 R
77 0 R
78 0 R
79 0 R
]endobj
80 0 obj<</Subtype/Link/Rect[108.0 670.8 170.0 683.8]/Border[0 0 0]/Dest[199 0 R/XYZ null 188 0]>>endobj
81 0 obj<</Subtype/Link/Rect[108.0 657.6 202.4 670.6]/Border[0 0 0]/Dest[202 0 R/XYZ null 768 0]>>endobj
82 0 obj<</Subtype/Link/Rect[72.0 644.4 123.3 657.4]/Border[0 0 0]/Dest[202 0 R/XYZ null 613 0]>>endobj
83 0 obj<</Subtype/Link/Rect[108.0 631.2 170.0 644.2]/Border[0 0 0]/Dest[202 0 R/XYZ null 565 0]>>endobj
84 0 obj<</Subtype/Link/Rect[108.0 618.0 202.4 631.0]/Border[0 0 0]/Dest[202 0 R/XYZ null 508 0]>>endobj
85 0 obj<</Subtype/Link/Rect[72.0 604.8 133.7 617.8]/Border[0 0 0]/Dest[202 0 R/XYZ null 354 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 591.6 170.0 604.6]/Border[0 0 0]/Dest[202 0 R/XYZ null 306 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[202 0 R/XYZ null 196 0]>>endobj
88 0 obj<</Subtype/Link/Rect[72.0 565.2 113.6 578.2]/Border[0 0 0]/Dest[205 0 R/XYZ null 759 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 552.0 202.4 565.0]/Border[0 0 0]/Dest[205 0 R/XYZ null 710 0]>>endobj
90 0 obj<</Subtype/Link/Rect[108.0 538.8 157.2 551.8]/Border[0 0 0]/Dest[205 0 R/XYZ null 411 0]>>endobj
91 0 obj<</Subtype/Link/Rect[36.0 512.4 194.2 525.4]/Border[0 0 0]/Dest[211 0 R/XYZ null 798 0]>>endobj
92 0 obj[80 0 R
81 0 R
81 0 obj<</Subtype/Link/Rect[108.0 684.0 202.4 697.0]/Border[0 0 0]/Dest[202 0 R/XYZ null 768 0]>>endobj
82 0 obj<</Subtype/Link/Rect[72.0 670.8 123.3 683.8]/Border[0 0 0]/Dest[202 0 R/XYZ null 613 0]>>endobj
83 0 obj<</Subtype/Link/Rect[108.0 657.6 170.0 670.6]/Border[0 0 0]/Dest[202 0 R/XYZ null 565 0]>>endobj
84 0 obj<</Subtype/Link/Rect[108.0 644.4 202.4 657.4]/Border[0 0 0]/Dest[202 0 R/XYZ null 508 0]>>endobj
85 0 obj<</Subtype/Link/Rect[72.0 631.2 133.7 644.2]/Border[0 0 0]/Dest[202 0 R/XYZ null 354 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 618.0 170.0 631.0]/Border[0 0 0]/Dest[202 0 R/XYZ null 306 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 604.8 202.4 617.8]/Border[0 0 0]/Dest[202 0 R/XYZ null 196 0]>>endobj
88 0 obj<</Subtype/Link/Rect[72.0 591.6 113.6 604.6]/Border[0 0 0]/Dest[205 0 R/XYZ null 759 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[205 0 R/XYZ null 710 0]>>endobj
90 0 obj<</Subtype/Link/Rect[108.0 565.2 157.2 578.2]/Border[0 0 0]/Dest[205 0 R/XYZ null 411 0]>>endobj
91 0 obj<</Subtype/Link/Rect[36.0 538.8 194.2 551.8]/Border[0 0 0]/Dest[211 0 R/XYZ null 798 0]>>endobj
92 0 obj[81 0 R
82 0 R
83 0 R
84 0 R
@@ -284,14 +284,12 @@ endobj
%°ß{ZÀ‘›ì ù=Å¡­´e&=@~¯thG„â‚¥Âèo‘ßoXÀQã¸÷}ô•±mç˜Á8lc®Á9æ½Qæ#/Á9°Üè–ã‚s`™±Åš3‡}€²×ÀXcV@éK`3ËÚ¬Þ€ò9°ÊÜX@=€ÀXa6.@l`3°½9êT˜ËÍ" mœ£ „m®gƒú¡€S˜ „A:ઢ©€ìÚ„>G˜ ‡bH}fv_ï\bAB/0Ò
-Vè׋‘Ã]‡+_Ž V˜È+ A,0
-V裥ÈaÜ媗#ˆ(Â
*âƒ-ôéBäpÝåB} Â(»‚Ç¥€VÏP„#C̾:\ÕB")£œ· Å ÙHd.„Ð'TæB,ÝÄ‹u+_†pd8üƒȇ
B8j¤—Â!Gl#´A `1Û¨«>BðÌØå
h)‚¸ú,(ÖCéÑg­¡% ÇÜ ýŽhIÂ1ó3?ú•‚+~€áï€d¼s°=z @KŽy>rs˜y€Õø©bå™H*:sˆ‡–(30Ê&ÐúyÖ9eˆιÈQDs‘ƒ²ÔÄ9£Ò7”AÄžžQéI+Ò@½t>¥Ï)Mª’ζÚ&HšÔ¡9!"li¥åÚ‡kˆ´ål¨vc! »ô™ ±¢g83âžö¼nų¢ †®@žâÌcˆñqCË`3Ĉ9qx@Ë`iˆf(Í4€ó`¦Ÿ¬TÔ‡
-g€M>kΩj-k€MœdY“½´¬ +ÈcX]>±rz‹€5D'V
œéöÔ1GNÀY™8樼A:©Ôï˜gB©œÇ ÜÏ™.H,8ޏÃtºc
*âƒ-ôéBäpÝåB} Â(»‚Ç¥€VÏP„#C̾:\ÕB")£œ· Å ÙHd.„Ð'TæB,ÝÄ‹u+_†pd8üƒȇ
B8j¤—Â!Gl#´A `1Û¨«>BðÌØå
h)‚¸ú,(ÖCéÑg­¡% ÇÜ ýŽhIÂ1ó3?ú•‚+~€áï€d¼s°=z @KŽy>rs˜y€Õø©bå™H*:sˆ‡–(30Ê&ÐúyÖ9eˆιÈQDs‘ƒ²ÔÄ9£Ò7”AÄžžQéI+Ò@½t>¥Ï)Mª’ζÚ&HšÔ¡9!"li¥åÚ‡kˆ´ål¨vc! »ô™ ±¢g83âžö¼nų¢ †®@žâÌcˆñqCË`3Ĉ9qx@Ë`iˆf(Í4€ó`¦Ÿ¬TÔ‡
-g€M>kΩj-k€MœdY“½´¬ +ÈcX]>±rz‹€5D'V
œéöÔ1GNÀY™8樼A:©Ôï˜gB©œÇ ÜÏ™.H,8ޏÃtºc
\EiW°/)áøf08Ô&[õ cœFwžÿf<[l2êR6WqÀúßtŽ*OôÛø\+Š¿S;‹añcq€‰‹ÙaQt_zî¬ñ¹‘‘«ˆ¸ÿ¥ó/9k·6\"â—{”56¼OßYqYtØqœ=šÌñ…Ie˜>˜¹l:ìŒöªÿì§Œý¹K.ê4Li¯ƒ~/ÛÌæqµ¶\Mä¦ÜÝo·Û/¯oåe»}È,?mcÍå¢ÃœSþ#†KȵqÀe'‰³tŽ+¼Û9á
wàÊêd†kÍÁ…Tú‰:,c=càÔ4Æ €?R§é°ŒÖÛNÓaÓ™_‚& :C¢Åqí±`»0ºk…äªé0‘qƒph­ ±÷UKó„ªY.´v†èuâ,øV­!zÕzìÓÝ ¹ð†èQ:j ÖÖãrfØ ¬OKüñÍPË%¢¹-±±’.h­
Ñ“&æV>¬­'BõÊXZ?Þ¹±´°öõ^†˜È,e \<1÷3–½í#×½{&ܸ¥rU¤ÍJÉ\"š LdöܹK0;¸)82i\o\´;¼•Ÿ'–‘P¬.t¬Â^¿¹1p1_uFÃÒÇàd}¡ãNSbé¥
\EiW°/)áøf08Ô&[õ cœFwžÿf<[l2êR6WqÀúßtŽ*OôÛø\+Š¿S;‹añcq€‰‹ÙaQt_zî¬ñ¹‘‘«ˆ¸ÿ¥ó/9k·6\"â—{”56¼OßYqYtØqœ=šÌñ…Ie˜>˜¹l:ìŒöªÿì§Œý¹K.ê4Li¯ƒ~/ÛÌæqµ¶\Mä¦ÜÝo·Û/¯oåe»}È,?mcÍå¢ÃœSþ#†KȵqÀe'‰³tŽ+¼Û9á
®ÃÌK_8.±´îBrvm¦(ˆ=$W›…ÄupÇU/«»Ð\¬•O_ºäj‚áÚ´.¹‚ÑzÜöžKdKÑxw gÑ q!Øý^
@@ -303,17 +301,16 @@ endobj
153 0 obj
6289
endobj
xÚ+ä2T0BCc3JÎår
ár
á
äHendstream
endobj
156 0 obj
31
endobj
154 0 obj<</Type/Page/Parent 150 0 R/Contents 155 0 R/Resources<</ProcSet[/PDF/Text]>>>>endobj
155 0 obj<</Length 156 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
ár
á
äHendstream
endobj
156 0 obj
31
VMoÛ8½çW zJ€µjÉŸÙ[§Y/šTk9Å|¡%ÊfC‰
endobj
157 0 obj<</Type/Page/Parent 150 0 R/Contents 158 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 9 0 R>>>>/Annots 14 0 R>>endobj
158 0 obj<</Length 159 0 R/Filter/FlateDecode>>stream
VMoã6½ûW ö”µjÉŸémgS›¬j9‹|¡¥‘­
@@ -341,12 +338,15 @@ endobj
164 0 obj<</Length 165 0 R/Filter/FlateDecode>>stream
xÚµ˜MSãF†ïüŠ>nªl­4²õÁ
0°¤ ÖAbO¹yl”²$G’‹åß§{F–ÚY3rÀ)ªLõh>ºßy§ÇŸ9`㟾׃4?»ŒÏ¾Þ„ lˆ—øÄóˆ_<Ê¥¬d‘Êú·ø/…8¾FÆîÄ
ÙªÄãGâ7 À°5Ylæ´ãt‚·b;k;ÅðíGêöCYB;¶¨
ÕÉÏjEú·¤Î¿'˜øggƒãB’\D'ß®°Mˆ–ø‰ëù-NmxKQŠ<ÕÑ?±<…Œ‰aKȰàòq¬H¶™Èë¸N‹\á°¬·=Ã%<z°,Öëâ%ÍWêÁÒ
Êv×<½BýŒoµÌ™2œ4†mÛ®1!ÛÛ®»;ŸÒãËûùØ2¬3µße‘/ÓÕ¶TûÝÇy¼dæë8ßµŽ[Žúžï¿Í˜ñðµªE·y-Êeœ˜‰*]åô/)ÓMm1çþßf›u¯b øñÇm†ç÷dÓøÕ:^,ë—¸p¾ÈÒ<­jŒOQVŸm¼>ÂþnXZë_ŽpþŽëó²X•q–‘´Žö;|Øçw(’m™Ö¯x$6EYa7šï³‰êXá…ï„ᱟIÜϽ‰û‰6Ioo2×Ö„±:ŒŽ­£õ³(»ÂPXò"ï
²¸zšG0+Óm.‹&i²²Ðø§Å…oy„Ç/–åz]¾fÅJ¿¸à/BVCµuÏoмàW;æœ:Æ9…gM¨?êa|õ0;–s®û»*‹e¶ÚVº¿‡¤HV’Þ…ù:i'–¶ûV€³Ã~þžû³¦gcÇÕËTãÜÍflœè­ndwE#«e’J˜É:[ô/­²MŽ6竺Ë7kÙ‡©\>ÿTÿÑÅõoýÜ­§\6¯I%áb‘gEV7Á²ª)‚Ûdý¹¡ö·èÄ‹æï,h^•«*És’Ü)V=ZM$Óm•5o¸k6eÕ|nˆx~hˆXÖ'qôôNœžjy¢|ÿ8˜ïØ=‰÷¿%|g:càcWè/°ñ½yUç<õ‘®S”ÅxÏyj Ù
ÙÎu|f[6:'}8ôñx‹þiÙà.Ž“ƒ êÆ¢4rœe€«5áŽãq~2È3"G7<'ÂòÍ<#Ÿú˜#ψ\ȧÈ{Î@8Ýi`¹=ïOöú¿ü%_ÕŠÎ;7˜hU\,Êg4‡²n"%Gô‰ŒÌœën²µ„›²Ê“¢L³e–* uržX®EéG³ÛÑŒÊ6èÉ·Qã;=©†IO-ÝêÉ€·zÚñm!#ÏÌ·#(ڞȻ¡55óŒ@Þ§¼ôüÁüõÛ›2é;Ú ~Éä}R¬¶xî÷Ìâ—¬ZÀõ"£ì}$aï8žÃçð{ù I±è$ɾo¤.Bêš)výUùèu‘– ò.#®’¢þÌÓuÛäû·Ûl!?ÝåC¹k5ÍHæIÑdéðê
;Áž(mL•PTã°”Càw¯¦@ûÆÀ9A>,H§&žÈÊ5M<#hŸ…VÈø#ö=Õûàñæ
¿õÃÜg…ìý,‘9ú–AM™–ë“z•T@›!Ý0dhG«˜h`…3€s2b<Œ<#È 'q#Ïä}ò]#ÏÊèt`þœ “•v•‘gò¡½üaňPè}KŠíŠñÛ2Y×X,U¸‡õݦíÉHþóÿh£ewR
“†ZZKÄ@3s†u£ç˜ 'HC.îa#ϪÎ<Œ‰çi(èŸtú*ÅšxF ïÑÚÈ3ù`:ONPõGµAÏ¡Q?d
Fð¨Ód-•<±ô‡¨©¶i³ÅâïÃôEú˜…ú¥ëÂ,ñ
Ú£Rt'hÕ0 º¥µ^
OÏ3ù©‡qÒòŒÈÀ±Í8¼k
4ȇ:ç 4 t›xF ÒEËÈ3‚J庉ç]7B’«‰g•‡ ¨ã&!<’͆rü,›W) ¸ŸÏ”Z°|éò^ŸÖÛ¦ŽºèL«†I
-­3m @Þæ’SpNÐù5ÈûœÎÏ Zóô9A©u)µDj§BßáTj=ÇÁ·7,·ù³Ñõ1–ý]Fa<†oq¬*ÔÓ&×
úòT7LÉmi;Í*O}
Žç•›ÁÀd8¡‹ßÈsB,æùp"ow¡‘g3¹PÇ!7ìË_3”m¸Ø¢ÁÓ
@@ -470,24 +470,30 @@ endobj
F¥iÈòäÑ–†ÒοÝÜ‚³ˆq„DÌ3–­!Ú CÊÖ”±rCb™a$Vð ²Ò÷6NÔfœi´Lx¾Ô;6›o£²ü*Ùï;½gõJ¯Ë"OXFZ5µaFð&0:iZØí]¤ç2ÄŒr3Ô´jeQ´Þ+™
Õ©ª,†¥è4ÔÕïð±ìµ¦ð‡%Û>\(ž§(muJ¾ÐcFÚn´Þ’{$3W©Å€ñ ÖšgbN¥Ð¹0Sœà6=T¨ÛÅÔRi-ætÔB.sC‡š
endobj
S',"Òl=kµ éžä©ÜØÄ{–ä¤Û~(
A/‘ :!#•¥Gˆ!†£’ëοWêòœ?+ÕgG³Ö!tà\¥´3ÂN¡œ_ÍZußÖ®•A=©$¾`s«ºWÚ¶ìˆE"Ú§{ _h÷KyOÝb… &*é·Áu\ø|JчGnߢmð·J<*Øâ]Þ͇T¬€V…Õ ~í—ŽS£š<“„HGòioõ÷+7ZWÔÈ*|í> ÞºÏ*ˆ©[ßk:øˆÍöo³·L|ÄtiÁâ/-W%ÿŸ†£{SëÑèŸøng¸§ÏûíçÖ=³OèC.t·.ìNNªNñ9€þ0(U,#Ï•ŒÄ"ÏJ寘d ,úä&aE§u¼^ŸÒ:ßµY^ÏNö¼¡3÷Ù?ãiãkãm•Äendstream
767
endobj
199 0 obj<</Type/Page/Parent 150 0 R/Contents 200 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
200 0 obj<</Length 201 0 R/Filter/FlateDecode>>stream
xÚ¥UÁrÚ0½ó;>%™b°“4§$Mzj'О2“‘å5¨µ-W–Ii§ÿÞ•„ÁBÓépÀ’vßîÛ}Z}ï0¤_ÓFð¼w=ë
endobj
198 0 obj
767
endobj
199 0 obj<</Type/Page/Parent 150 0 R/Contents 200 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
200 0 obj<</Length 201 0 R/Filter/FlateDecode>>stream
xÚ¥UÁrÚ0½ó;>%™b°“4§$Mzj'О2“‘å5¨µ-W–Ii§ÿÞ•„ÁBÓépÀ’vßîÛ}Z}ï0¤_ÓFð¼w=ë
î†p³ÔìDçô•œü:
¡ ýs³ð}oO¡®U'«ÇÓËÎéo³Ü]@05Ð}ÂîBsríá S‚ÅV«±±"ÿÑÐÖV~Y.й3C¬Â©1Ù€À³Ð `0ÏdÌ2¨¸,ªË2ˆ8+…f™ø‰ ¥êÍ¢j<½7@k¦w×¢zÐLckO†#ßò˜-d­p,µh šÜAÕY+M†7Ÿï@UÊ8B&bÅÔªÉx¹e²|y]iòœ‹ÂQ#„NðRa*~€Çë²ò -óÑ¥æövè9&ð¾w“¬Â2£ ˆWÖ7¼:±™š×9Úd.QA)«JP£‘0¢&jQ&ù~‡2ùŒŠ³
U]$¨ÈD‘[Œú‘Ê URž¦¾OË
U]$¨ÈD‘[Œú‘Ê URž¦¾OË
¡NjtÌtë¸á{U¬Ö¡w(«]ž.K*:ƒJÖŠú”Šv#ä™õñ*ˆàž¿'ßðÂ
áä¶R¬©âß2jx“ÕXÒ¦ƒ%S¤INÀŠdk(òAg¤ÄTf¦––.sbbþ­S¨+®DL—Ëʳ‰ÿÖ%¹ýpì‘va§ö—08s x­” dªBw"u—àlÐ ¢ÕŸãL¯!^˜"˜­Ê£dò· rE%ÔËÛ—àÕ‚4ðž´¬,‘¬7háX8ìNõ›ØäMWÕÖe³ÜΛÄ5ùqY†ŽÛ‚-±«ŒŘM›·qK0}Yƒ³î‹`zI·韠ÜàK%ÒNÉjï!ÙSÊ:´˜`†ØS«Z—G$ÁƒV5§Wé¨.¢×è¢jþS„sLe˜X›1çR°Dv¶Ú29_sÆ‘?h2Y×ÖÖÿF©˜×ÊJ>°‚ÍÑ
à>cV:}çÖŸ†ÃƒOôx:&<{LÌÆí¬÷©÷?ðendstream
endobj
endobj
201 0 obj
201 0 obj
789
endobj
202 0 obj<</Type/Page/Parent 150 0 R/Contents 203 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
203 0 obj<</Length 204 0 R/Filter/FlateDecode>>stream
xÚÕ–MoÚ@†ïüЧ$
2Мš¦ ­×vc{ÝÝu(ªúß;»kdò©J•*"×óξ3óŒ”ôña˜?žwÎÃNÿÝ ü1„+zLéG|tîÞÞ
202 0 obj<</Type/Page/Parent 150 0 R/Contents 203 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
^åXh¦SQ‡ß)r ¾ï"{ɉ¼`<¥eÅu%T² v‡À€‹ÜÈ!Ê¿…”â”i̶áJP´N°Ö+b@“+Ç<BY'ŠÐ\K—ù#òC×ŵ%Œ!-€q.dÌ
ްIubóÝ1™²(C(Xžk(E–ò-°HÜáj@o8ölÁý“æ¢75pa’ª½ÒèLÃâëÕ5ý“ JÓåhû­“ºH^•j©)íÒ˜¯Vä¯v.ªSƒÕ¸Îœ@ÿ•”¦·Š¦ƒÖ˜‰9¼¹Ñ3ý¼žéCýï3×3BdbšÖ3]
$XdL)T÷15F½ÑÀ êχK;ŠGšÓœ¹Ic&†ê~ò
JÎT=ܪˆQ*8ÅD¨7ˆlhü
@@ -624,22 +630,22 @@ xref
261 0 obj<</Parent 259 0 R/Title(B.4.2 Documentation)/Dest[199 0 R/XYZ null 511 null]/Prev 260 0 R>>endobj
262 0 obj<</Parent 249 0 R/Count -2/First 263 0 R/Last 264 0 R/Title(B.5 Types)/Dest[199 0 R/XYZ null 407 null]/Prev 259 0 R/Next 265 0 R>>endobj
263 0 obj<</Parent 262 0 R/Title(B.5.1 Naming)/Dest[199 0 R/XYZ null 373 null]/Next 264 0 R>>endobj
266 0 obj<</Parent 265 0 R/Title(B.6.1 Naming)/Dest[199 0 R/XYZ null 157 null]/Next 267 0 R>>endobj
267 0 obj<</Parent 265 0 R/Title(B.6.2 Documentation)/Dest[202 0 R/XYZ null 724 null]/Prev 266 0 R>>endobj
268 0 obj<</Parent 249 0 R/Count -2/First 269 0 R/Last 270 0 R/Title(B.7 Classes)/Dest[202 0 R/XYZ null 568 null]/Prev 265 0 R/Next 271 0 R>>endobj
269 0 obj<</Parent 268 0 R/Title(B.7.1 Naming)/Dest[202 0 R/XYZ null 534 null]/Next 270 0 R>>endobj
270 0 obj<</Parent 268 0 R/Title(B.7.2 Documentation)/Dest[202 0 R/XYZ null 478 null]/Prev 269 0 R>>endobj
271 0 obj<</Parent 249 0 R/Count -2/First 272 0 R/Last 273 0 R/Title(B.8 Constants)/Dest[202 0 R/XYZ null 309 null]/Prev 268 0 R/Next 274 0 R>>endobj
272 0 obj<</Parent 271 0 R/Title(B.8.1 Naming)/Dest[202 0 R/XYZ null 275 null]/Next 273 0 R>>endobj
273 0 obj<</Parent 271 0 R/Title(B.8.2 Documentation)/Dest[202 0 R/XYZ null 166 null]/Prev 272 0 R>>endobj
274 0 obj<</Parent 249 0 R/Count -2/First 275 0 R/Last 276 0 R/Title(B.9 Code)/Dest[205 0 R/XYZ null 713 null]/Prev 271 0 R>>endobj
275 0 obj<</Parent 274 0 R/Title(B.9.1 Documentation)/Dest[205 0 R/XYZ null 680 null]/Next 276 0 R>>endobj
276 0 obj<</Parent 274 0 R/Title(B.9.2 Style)/Dest[205 0 R/XYZ null 381 null]/Prev 275 0 R>>endobj
277 0 obj<</Parent 223 0 R/Title(C Software Trouble Report Form)/Dest[211 0 R/XYZ null 724 null]/Prev 249 0 R>>endobj
278 0 obj<</Type/Catalog/Pages 150 0 R/Names 93 0 R/PageLayout/SinglePage/Outlines 223 0 R/OpenAction[157 0 R/XYZ null null null]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</P(eltit)>>2<</S/r>>4<</S/D>>]>>>>endobj
xref
0 279
0000000000 65535 f
264 0 obj<</Parent 262 0 R/Title(B.5.2 Documentation)/Dest[199 0 R/XYZ null 304 null]/Prev 263 0 R>>endobj
265 0 obj<</Parent 249 0 R/Count -2/First 266 0 R/Last 267 0 R/Title(B.6 Structures)/Dest[199 0 R/XYZ null 191 null]/Prev 262 0 R/Next 268 0 R>>endobj
266 0 obj<</Parent 265 0 R/Title(B.6.1 Naming)/Dest[199 0 R/XYZ null 157 null]/Next 267 0 R>>endobj
267 0 obj<</Parent 265 0 R/Title(B.6.2 Documentation)/Dest[202 0 R/XYZ null 724 null]/Prev 266 0 R>>endobj
268 0 obj<</Parent 249 0 R/Count -2/First 269 0 R/Last 270 0 R/Title(B.7 Classes)/Dest[202 0 R/XYZ null 568 null]/Prev 265 0 R/Next 271 0 R>>endobj
269 0 obj<</Parent 268 0 R/Title(B.7.1 Naming)/Dest[202 0 R/XYZ null 534 null]/Next 270 0 R>>endobj
270 0 obj<</Parent 268 0 R/Title(B.7.2 Documentation)/Dest[202 0 R/XYZ null 478 null]/Prev 269 0 R>>endobj
271 0 obj<</Parent 249 0 R/Count -2/First 272 0 R/Last 273 0 R/Title(B.8 Constants)/Dest[202 0 R/XYZ null 309 null]/Prev 268 0 R/Next 274 0 R>>endobj
272 0 obj<</Parent 271 0 R/Title(B.8.1 Naming)/Dest[202 0 R/XYZ null 275 null]/Next 273 0 R>>endobj
273 0 obj<</Parent 271 0 R/Title(B.8.2 Documentation)/Dest[202 0 R/XYZ null 166 null]/Prev 272 0 R>>endobj
274 0 obj<</Parent 249 0 R/Count -2/First 275 0 R/Last 276 0 R/Title(B.9 Code)/Dest[205 0 R/XYZ null 713 null]/Prev 271 0 R>>endobj
275 0 obj<</Parent 274 0 R/Title(B.9.1 Documentation)/Dest[205 0 R/XYZ null 680 null]/Next 276 0 R>>endobj
276 0 obj<</Parent 274 0 R/Title(B.9.2 Style)/Dest[205 0 R/XYZ null 381 null]/Prev 275 0 R>>endobj
277 0 obj<</Parent 223 0 R/Title(C Software Trouble Report Form)/Dest[211 0 R/XYZ null 724 null]/Prev 249 0 R>>endobj
278 0 obj<</Type/Catalog/Pages 150 0 R/Names 93 0 R/PageLayout/SinglePage/Outlines 223 0 R/OpenAction[157 0 R/XYZ null null null]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</P(eltit)>>2<</S/r>>4<</S/D>>]>>>>endobj
xref
0 279
0000000000 65535 f
0000000015 00000 n
@@ -706,128 +712,128 @@ xref
0000007037 00000 n
0000007141 00000 n
0000007246 00000 n
0000007561 00000 n
0000007666 00000 n
0000007771 00000 n
0000007876 00000 n
0000007981 00000 n
0000008086 00000 n
0000008191 00000 n
0000008296 00000 n
0000008401 00000 n
0000008506 00000 n
0000008610 00000 n
0000008713 00000 n
0000008816 00000 n
0000009120 00000 n
0000009225 00000 n
0000009330 00000 n
0000009434 00000 n
0000009539 00000 n
0000009644 00000 n
0000009748 00000 n
0000009853 00000 n
0000009958 00000 n
0000010062 00000 n
0000010167 00000 n
0000010272 00000 n
0000010376 00000 n
0000010477 00000 n
0000010509 00000 n
0000010541 00000 n
0000011261 00000 n
0000011309 00000 n
0000011357 00000 n
0000011405 00000 n
0000011453 00000 n
0000011502 00000 n
0000011551 00000 n
0000011600 00000 n
0000007351 00000 n
0000007456 00000 n
0000007561 00000 n
0000007666 00000 n
0000007771 00000 n
0000007876 00000 n
0000007981 00000 n
0000008086 00000 n
0000008191 00000 n
0000008296 00000 n
0000008401 00000 n
0000008506 00000 n
0000008611 00000 n
0000008715 00000 n
0000008818 00000 n
0000008921 00000 n
0000009232 00000 n
0000009337 00000 n
0000009441 00000 n
0000009546 00000 n
0000009651 00000 n
0000009755 00000 n
0000009860 00000 n
0000009965 00000 n
0000010069 00000 n
0000010174 00000 n
0000010279 00000 n
0000010383 00000 n
0000010477 00000 n
0000010509 00000 n
0000010541 00000 n
0000011261 00000 n
0000011309 00000 n
0000011357 00000 n
0000011405 00000 n
0000011453 00000 n
0000011502 00000 n
0000011698 00000 n
0000011747 00000 n
0000011796 00000 n
0000011845 00000 n
0000011894 00000 n
0000011943 00000 n
0000011992 00000 n
0000012041 00000 n
0000012090 00000 n
0000012139 00000 n
0000012188 00000 n
0000012237 00000 n
0000012286 00000 n
0000012335 00000 n
0000012384 00000 n
0000012433 00000 n
0000012482 00000 n
0000012531 00000 n
0000012580 00000 n
0000012629 00000 n
0000012678 00000 n
0000012727 00000 n
0000012776 00000 n
0000012825 00000 n
0000012874 00000 n
0000012923 00000 n
0000012972 00000 n
0000013021 00000 n
0000013070 00000 n
0000013119 00000 n
0000013168 00000 n
0000013217 00000 n
0000013266 00000 n
0000013315 00000 n
0000013364 00000 n
0000013413 00000 n
0000013462 00000 n
0000013511 00000 n
0000013560 00000 n
0000013609 00000 n
0000013658 00000 n
0000013707 00000 n
0000013756 00000 n
0000013805 00000 n
0000013854 00000 n
0000013903 00000 n
0000014164 00000 n
0000014316 00000 n
0000020676 00000 n
0000020698 00000 n
0000020793 00000 n
0000020895 00000 n
0000020915 00000 n
0000021069 00000 n
0000022130 00000 n
0000022151 00000 n
0000022264 00000 n
0000022452 00000 n
0000022473 00000 n
0000022627 00000 n
0000024028 00000 n
0000024050 00000 n
0000024163 00000 n
0000024356 00000 n
0000024377 00000 n
0000024508 00000 n
0000025119 00000 n
0000025140 00000 n
0000025253 00000 n
0000025443 00000 n
0000025464 00000 n
0000025595 00000 n
0000026596 00000 n
0000026617 00000 n
0000026730 00000 n
0000026932 00000 n
0000026953 00000 n
0000027093 00000 n
0000028111 00000 n
0000028132 00000 n
0000028245 00000 n
0000028444 00000 n
0000011551 00000 n
0000011600 00000 n
0000011649 00000 n
0000011698 00000 n
0000011747 00000 n
0000011796 00000 n
0000011845 00000 n
0000011894 00000 n
0000011943 00000 n
0000011992 00000 n
0000012041 00000 n
0000012090 00000 n
0000012139 00000 n
0000012188 00000 n
0000012237 00000 n
0000012286 00000 n
0000012335 00000 n
0000012384 00000 n
0000012433 00000 n
0000012482 00000 n
0000012531 00000 n
0000012580 00000 n
0000012629 00000 n
0000012678 00000 n
0000012727 00000 n
0000012776 00000 n
0000012825 00000 n
0000012874 00000 n
0000012923 00000 n
0000012972 00000 n
0000013021 00000 n
0000013070 00000 n
0000013119 00000 n
0000013168 00000 n
0000013217 00000 n
0000013266 00000 n
0000013315 00000 n
0000013364 00000 n
0000013413 00000 n
0000013462 00000 n
0000013511 00000 n
0000013560 00000 n
0000013609 00000 n
0000013658 00000 n
0000013707 00000 n
0000013756 00000 n
0000013805 00000 n
0000013854 00000 n
0000013903 00000 n
0000014164 00000 n
0000014316 00000 n
0000020676 00000 n
0000020698 00000 n
0000020793 00000 n
0000020895 00000 n
0000020915 00000 n
0000021069 00000 n
0000022133 00000 n
0000022154 00000 n
0000022267 00000 n
0000022455 00000 n
0000022476 00000 n
0000022630 00000 n
0000024035 00000 n
0000024057 00000 n
0000024170 00000 n
0000024363 00000 n
0000024384 00000 n
0000024515 00000 n
0000025126 00000 n
0000025147 00000 n
0000025260 00000 n
0000025450 00000 n
0000025471 00000 n
0000025602 00000 n
0000026618 00000 n
0000026639 00000 n
0000026752 00000 n
0000026954 00000 n
0000026975 00000 n
0000027115 00000 n
0000028133 00000 n
0000028154 00000 n
0000028267 00000 n
0000028605 00000 n
0000028466 00000 n
0000028487 00000 n
0000029293 00000 n
0000028627 00000 n
0000029294 00000 n
+1107 -948
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+257 -246
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 1.8.8 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20000731155319Z)/Title( CUPS Interface Design Description)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 1.9b1 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20001118180316Z)/Title( CUPS Interface Design Description)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
@@ -75,44 +75,44 @@
55 0 obj[52 0 R
54 0 R
]endobj
56 0 obj<</Subtype/Link/Rect[72.0 670.8 107.8 683.8]/Border[0 0 0]/Dest[144 0 R/XYZ null 798 0]>>endobj
57 0 obj<</Subtype/Link/Rect[108.0 657.6 183.8 670.6]/Border[0 0 0]/Dest[144 0 R/XYZ null 745 0]>>endobj
58 0 obj<</Subtype/Link/Rect[108.0 644.4 203.0 657.4]/Border[0 0 0]/Dest[144 0 R/XYZ null 672 0]>>endobj
59 0 obj<</Subtype/Link/Rect[108.0 631.2 216.4 644.2]/Border[0 0 0]/Dest[144 0 R/XYZ null 467 0]>>endobj
60 0 obj<</Subtype/Link/Rect[72.0 604.8 131.6 617.8]/Border[0 0 0]/Dest[150 0 R/XYZ null 798 0]>>endobj
61 0 obj<</Subtype/Link/Rect[108.0 591.6 222.6 604.6]/Border[0 0 0]/Dest[150 0 R/XYZ null 745 0]>>endobj
62 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[150 0 R/XYZ null 540 0]>>endobj
63 0 obj<</Subtype/Link/Rect[72.0 552.0 168.5 565.0]/Border[0 0 0]/Dest[156 0 R/XYZ null 798 0]>>endobj
64 0 obj<</Subtype/Link/Rect[108.0 538.8 208.2 551.8]/Border[0 0 0]/Dest[156 0 R/XYZ null 745 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 525.6 280.4 538.6]/Border[0 0 0]/Dest[156 0 R/XYZ null 631 0]>>endobj
66 0 obj<</Subtype/Link/Rect[144.0 512.4 292.5 525.4]/Border[0 0 0]/Dest[156 0 R/XYZ null 251 0]>>endobj
67 0 obj<</Subtype/Link/Rect[108.0 499.2 192.0 512.2]/Border[0 0 0]/Dest[159 0 R/XYZ null 598 0]>>endobj
68 0 obj<</Subtype/Link/Rect[108.0 486.0 178.6 499.0]/Border[0 0 0]/Dest[162 0 R/XYZ null 783 0]>>endobj
69 0 obj<</Subtype/Link/Rect[144.0 472.8 219.8 485.8]/Border[0 0 0]/Dest[162 0 R/XYZ null 707 0]>>endobj
70 0 obj<</Subtype/Link/Rect[144.0 459.6 222.2 472.6]/Border[0 0 0]/Dest[162 0 R/XYZ null 349 0]>>endobj
71 0 obj<</Subtype/Link/Rect[108.0 446.4 179.2 459.4]/Border[0 0 0]/Dest[162 0 R/XYZ null 217 0]>>endobj
72 0 obj<</Subtype/Link/Rect[108.0 433.2 280.6 446.2]/Border[0 0 0]/Dest[165 0 R/XYZ null 618 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 420.0 249.7 433.0]/Border[0 0 0]/Dest[165 0 R/XYZ null 530 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 406.8 305.7 419.8]/Border[0 0 0]/Dest[165 0 R/XYZ null 460 0]>>endobj
75 0 obj<</Subtype/Link/Rect[108.0 393.6 257.1 406.6]/Border[0 0 0]/Dest[168 0 R/XYZ null 587 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 380.4 221.6 393.4]/Border[0 0 0]/Dest[168 0 R/XYZ null 419 0]>>endobj
77 0 obj<</Subtype/Link/Rect[144.0 367.2 216.7 380.2]/Border[0 0 0]/Dest[171 0 R/XYZ null 677 0]>>endobj
78 0 obj<</Subtype/Link/Rect[144.0 354.0 224.7 367.0]/Border[0 0 0]/Dest[177 0 R/XYZ null 189 0]>>endobj
79 0 obj<</Subtype/Link/Rect[72.0 327.6 171.0 340.6]/Border[0 0 0]/Dest[186 0 R/XYZ null 798 0]>>endobj
80 0 obj<</Subtype/Link/Rect[108.0 314.4 213.4 327.4]/Border[0 0 0]/Dest[186 0 R/XYZ null 745 0]>>endobj
81 0 obj<</Subtype/Link/Rect[108.0 301.2 237.6 314.2]/Border[0 0 0]/Dest[186 0 R/XYZ null 619 0]>>endobj
82 0 obj<</Subtype/Link/Rect[108.0 288.0 198.5 301.0]/Border[0 0 0]/Dest[189 0 R/XYZ null 692 0]>>endobj
83 0 obj<</Subtype/Link/Rect[144.0 274.8 248.2 287.8]/Border[0 0 0]/Dest[189 0 R/XYZ null 578 0]>>endobj
84 0 obj<</Subtype/Link/Rect[108.0 261.6 219.9 274.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 720 0]>>endobj
85 0 obj<</Subtype/Link/Rect[108.0 248.4 202.7 261.4]/Border[0 0 0]/Dest[198 0 R/XYZ null 620 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 235.2 199.1 248.2]/Border[0 0 0]/Dest[204 0 R/XYZ null 425 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 222.0 236.9 235.0]/Border[0 0 0]/Dest[204 0 R/XYZ null 352 0]>>endobj
88 0 obj<</Subtype/Link/Rect[108.0 208.8 257.4 221.8]/Border[0 0 0]/Dest[204 0 R/XYZ null 278 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 195.6 263.5 208.6]/Border[0 0 0]/Dest[204 0 R/XYZ null 192 0]>>endobj
90 0 obj<</Subtype/Link/Rect[72.0 169.2 132.2 182.2]/Border[0 0 0]/Dest[210 0 R/XYZ null 798 0]>>endobj
91 0 obj<</Subtype/Link/Rect[72.0 142.8 124.2 155.8]/Border[0 0 0]/Dest[216 0 R/XYZ null 798 0]>>endobj
92 0 obj<</Subtype/Link/Rect[108.0 129.6 155.0 142.6]/Border[0 0 0]/Dest[216 0 R/XYZ null 745 0]>>endobj
93 0 obj<</Subtype/Link/Rect[108.0 116.4 172.8 129.4]/Border[0 0 0]/Dest[216 0 R/XYZ null 566 0]>>endobj
56 0 obj<</Subtype/Link/Rect[72.0 684.0 107.8 697.0]/Border[0 0 0]/Dest[144 0 R/XYZ null 798 0]>>endobj
57 0 obj<</Subtype/Link/Rect[108.0 670.8 183.8 683.8]/Border[0 0 0]/Dest[144 0 R/XYZ null 745 0]>>endobj
58 0 obj<</Subtype/Link/Rect[108.0 657.6 203.0 670.6]/Border[0 0 0]/Dest[144 0 R/XYZ null 672 0]>>endobj
59 0 obj<</Subtype/Link/Rect[108.0 644.4 216.4 657.4]/Border[0 0 0]/Dest[144 0 R/XYZ null 467 0]>>endobj
60 0 obj<</Subtype/Link/Rect[72.0 618.0 131.6 631.0]/Border[0 0 0]/Dest[150 0 R/XYZ null 798 0]>>endobj
61 0 obj<</Subtype/Link/Rect[108.0 604.8 222.6 617.8]/Border[0 0 0]/Dest[150 0 R/XYZ null 745 0]>>endobj
62 0 obj<</Subtype/Link/Rect[108.0 591.6 202.4 604.6]/Border[0 0 0]/Dest[150 0 R/XYZ null 540 0]>>endobj
63 0 obj<</Subtype/Link/Rect[72.0 565.2 168.5 578.2]/Border[0 0 0]/Dest[156 0 R/XYZ null 798 0]>>endobj
64 0 obj<</Subtype/Link/Rect[108.0 552.0 208.2 565.0]/Border[0 0 0]/Dest[156 0 R/XYZ null 745 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 538.8 280.4 551.8]/Border[0 0 0]/Dest[156 0 R/XYZ null 631 0]>>endobj
66 0 obj<</Subtype/Link/Rect[144.0 525.6 292.5 538.6]/Border[0 0 0]/Dest[156 0 R/XYZ null 251 0]>>endobj
67 0 obj<</Subtype/Link/Rect[108.0 512.4 192.0 525.4]/Border[0 0 0]/Dest[159 0 R/XYZ null 598 0]>>endobj
68 0 obj<</Subtype/Link/Rect[108.0 499.2 178.6 512.2]/Border[0 0 0]/Dest[162 0 R/XYZ null 783 0]>>endobj
69 0 obj<</Subtype/Link/Rect[144.0 486.0 219.8 499.0]/Border[0 0 0]/Dest[162 0 R/XYZ null 707 0]>>endobj
70 0 obj<</Subtype/Link/Rect[144.0 472.8 222.2 485.8]/Border[0 0 0]/Dest[162 0 R/XYZ null 349 0]>>endobj
71 0 obj<</Subtype/Link/Rect[108.0 459.6 179.2 472.6]/Border[0 0 0]/Dest[162 0 R/XYZ null 217 0]>>endobj
72 0 obj<</Subtype/Link/Rect[108.0 446.4 280.6 459.4]/Border[0 0 0]/Dest[165 0 R/XYZ null 618 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 433.2 249.7 446.2]/Border[0 0 0]/Dest[165 0 R/XYZ null 530 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 420.0 305.7 433.0]/Border[0 0 0]/Dest[165 0 R/XYZ null 460 0]>>endobj
75 0 obj<</Subtype/Link/Rect[108.0 406.8 257.1 419.8]/Border[0 0 0]/Dest[168 0 R/XYZ null 587 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 393.6 221.6 406.6]/Border[0 0 0]/Dest[168 0 R/XYZ null 419 0]>>endobj
77 0 obj<</Subtype/Link/Rect[144.0 380.4 216.7 393.4]/Border[0 0 0]/Dest[171 0 R/XYZ null 677 0]>>endobj
78 0 obj<</Subtype/Link/Rect[144.0 367.2 224.7 380.2]/Border[0 0 0]/Dest[177 0 R/XYZ null 170 0]>>endobj
79 0 obj<</Subtype/Link/Rect[72.0 340.8 171.0 353.8]/Border[0 0 0]/Dest[186 0 R/XYZ null 798 0]>>endobj
80 0 obj<</Subtype/Link/Rect[108.0 327.6 213.4 340.6]/Border[0 0 0]/Dest[186 0 R/XYZ null 745 0]>>endobj
81 0 obj<</Subtype/Link/Rect[108.0 314.4 237.6 327.4]/Border[0 0 0]/Dest[186 0 R/XYZ null 619 0]>>endobj
82 0 obj<</Subtype/Link/Rect[108.0 301.2 198.5 314.2]/Border[0 0 0]/Dest[189 0 R/XYZ null 692 0]>>endobj
83 0 obj<</Subtype/Link/Rect[144.0 288.0 248.2 301.0]/Border[0 0 0]/Dest[189 0 R/XYZ null 578 0]>>endobj
84 0 obj<</Subtype/Link/Rect[108.0 274.8 219.9 287.8]/Border[0 0 0]/Dest[198 0 R/XYZ null 720 0]>>endobj
85 0 obj<</Subtype/Link/Rect[108.0 261.6 202.7 274.6]/Border[0 0 0]/Dest[198 0 R/XYZ null 620 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 248.4 199.1 261.4]/Border[0 0 0]/Dest[204 0 R/XYZ null 425 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 235.2 236.9 248.2]/Border[0 0 0]/Dest[204 0 R/XYZ null 352 0]>>endobj
88 0 obj<</Subtype/Link/Rect[108.0 222.0 257.4 235.0]/Border[0 0 0]/Dest[204 0 R/XYZ null 278 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 208.8 263.5 221.8]/Border[0 0 0]/Dest[204 0 R/XYZ null 192 0]>>endobj
90 0 obj<</Subtype/Link/Rect[72.0 182.4 132.2 195.4]/Border[0 0 0]/Dest[210 0 R/XYZ null 798 0]>>endobj
91 0 obj<</Subtype/Link/Rect[72.0 156.0 124.2 169.0]/Border[0 0 0]/Dest[216 0 R/XYZ null 798 0]>>endobj
92 0 obj<</Subtype/Link/Rect[108.0 142.8 155.0 155.8]/Border[0 0 0]/Dest[216 0 R/XYZ null 745 0]>>endobj
93 0 obj<</Subtype/Link/Rect[108.0 129.6 172.8 142.6]/Border[0 0 0]/Dest[216 0 R/XYZ null 566 0]>>endobj
94 0 obj[56 0 R
57 0 R
58 0 R
@@ -177,7 +177,7 @@
117 0 obj<</D[168 0 R/XYZ null 587 null]>>endobj
118 0 obj<</D[168 0 R/XYZ null 419 null]>>endobj
119 0 obj<</D[171 0 R/XYZ null 677 null]>>endobj
120 0 obj<</D[177 0 R/XYZ null 189 null]>>endobj
120 0 obj<</D[177 0 R/XYZ null 170 null]>>endobj
121 0 obj<</D[186 0 R/XYZ null 798 null]>>endobj
122 0 obj<</D[186 0 R/XYZ null 745 null]>>endobj
123 0 obj<</D[186 0 R/XYZ null 619 null]>>endobj
@@ -269,12 +269,14 @@ endobj
%°ß{ZÀ‘›ì ù=Å¡­´e&=@~¯thG„â‚¥Âèo‘ßoXÀQã¸÷}ô•±mç˜Á8lc®Á9æ½Qæ#/Á9°Üè–ã‚s`™±Åš3‡}€²×ÀXcV@éK`3ËÚ¬Þ€ò9°ÊÜX@=€ÀXa6.@l`3°½9êT˜ËÍ" mœ£ „m®gƒú¡€S˜ „A:ઢ©€ìÚ„>G˜ ‡bH}fv_ï\bAB/0Ò
-Vè׋‘Ã]‡+_Ž V˜È+ A,0
-V裥ÈaÜ媗#ˆ(Â
*âƒ-ôéBäpÝåB} Â(»‚Ç¥€VÏP„#C̾:\ÕB")£œ· Å ÙHd.„Ð'TæB,ÝÄ‹u+_†pd8üƒȇ
B8j¤—Â!Gl#´A `1Û¨«>BðÌØå
h)‚¸ú,(ÖCéÑg­¡% ÇÜ ýŽhIÂ1ó3?ú•‚+~€áï€d¼s°=z @KŽy>rs˜y€Õø©bå™H*:sˆ‡–(30Ê&ÐúyÖ9eˆιÈQDs‘ƒ²ÔÄ9£Ò7”AÄžžQéI+Ò@½t>¥Ï)Mª’ζÚ&HšÔ¡9!"li¥åÚ‡kˆ´ål¨vc! »ô™ ±¢g83âžö¼nų¢ †®@žâÌcˆñqCË`3Ĉ9qx@Ë`iˆf(Í4€ó`¦Ÿ¬TÔ‡
*âƒ-ôéBäpÝåB} Â(»‚Ç¥€VÏP„#C̾:\ÕB")£œ· Å ÙHd.„Ð'TæB,ÝÄ‹u+_†pd8üƒȇ
B8j¤—Â!Gl#´A `1Û¨«>BðÌØå
h)‚¸ú,(ÖCéÑg­¡% ÇÜ ýŽhIÂ1ó3?ú•‚+~€áï€d¼s°=z @KŽy>rs˜y€Õø©bå™H*:sˆ‡–(30Ê&ÐúyÖ9eˆιÈQDs‘ƒ²ÔÄ9£Ò7”AÄžžQéI+Ò@½t>¥Ï)Mª’ζÚ&HšÔ¡9!"li¥åÚ‡kˆ´ål¨vc! »ô™ ±¢g83âžö¼nų¢ †®@žâÌcˆñqCË`3Ĉ9qx@Ë`iˆf(Í4€ó`¦Ÿ¬TÔ‡
-g€M>kΩj-k€MœdY“½´¬ +ÈcX]>±rz‹€5D'V
œéöÔ1GNÀY™8樼A:©Ôï˜gB©œÇ ÜÏ™.H,8ޏÃtºc
wàÊêd†kÍÁ…Tú‰:,c=càÔ4Æ €?R§é°ŒÖÛNÓaÓ™_‚& :C¢Åqí±`»0ºk…äªé0‘qƒph­ ±÷UKó„ªY.´v†èuâ,øV­!zÕzìÓÝ ¹ð†èQ:j ÖÖãrfØ ¬OKüñÍPË%¢¹-±±’.h­
Ñ“&æV>¬­'BõÊXZ?Þ¹±´°öõ^†˜È,e \<1÷3–½í#×½{&ܸ¥rU¤ÍJÉ\"š LdöܹK0;¸)82i\o\´;¼•Ÿ'–‘P¬.t¬Â^¿¹1p1_uFÃÒÇàd}¡ãNSbé¥
wàÊêd†kÍÁ…Tú‰:,c=càÔ4Æ €?R§é°ŒÖÛNÓaÓ™_‚& :C¢Åqí±`»0ºk…äªé0‘qƒph­ ±÷UKó„ªY.´v†èuâ,øV­!zÕzìÓÝ ¹ð†èQ:j ÖÖãrfØ ¬OKüñÍPË%¢¹-±±’.h­
\EiW°/)áøf08Ô&[õ cœFwžÿf<[l2êR6WqÀúßtŽ*OôÛø\+Š¿S;‹añcq€‰‹ÙaQt_zî¬ñ¹‘‘«ˆ¸ÿ¥ó/9k·6\"â—{”56¼OßYqYtØqœ=šÌñ…Ie˜>˜¹l:ìŒöªÿì§Œý¹K.ê4Li¯ƒ~/ÛÌæqµ¶\Mä¦ÜÝo·Û/¯oåe»}È,?mcÍå¢ÃœSþ#†KȵqÀe'‰³tŽ+¼Û9á
®ÃÌK_8.±´îBrvm¦(ˆ=$W›…ÄupÇU/«»Ð\¬•O_ºäj‚áÚ´.¹‚ÑzÜöžKdKÑxw gÑ q!Øý^
—XŒÒ¸°DôÖ!‰kvKÄgиš…X!•kæø—°MäšÕ)¹/T®9½3eû‰Ê5c`OJš#sÍ6Ähi/t®™†1±ŒÁ5Ï#îí2¸fbÔ,%=pÍ`sM®ôT9×ÄÚÁÈdr‰<\)´ášRY©Ã\®éÀx™dl.FÚÏ$ŽËšk¢ÉóÄ×þ9椰áòoŠü,M+.ß`ɧv\~UÑ&Yؒ˧ƒ¶Ê¶åòf—ŒoÍEΡö41qÏåcÚb™®î†Ë½,ÚŸ›pÂÕ
·¶øhß"7\o¶è®Ë’CW+Âé,—\ŽºìþІÆÕŠ'küâª-.¹ø©ÕªGw-qËe‘^HÝž“‹Kæ–ʇìþ‹ë6øà"æÅÇ[ï¹ðÃõV^qÙññýw/·÷Æuê5ƒAÞm_}ÝÛ'ש۞¶wê~z|õy_ß\çŽ;žpØ>ÜËývûøúêý–“pÍPàÿÿÿârõä
@@ -286,17 +288,16 @@ endobj
endobj
141 0 obj<</Type/Page/Parent 137 0 R/Contents 142 0 R/Resources<</ProcSet[/PDF/Text]>>>>endobj
142 0 obj<</Length 143 0 R/Filter/FlateDecode>>stream
141 0 obj<</Type/Page/Parent 137 0 R/Contents 142 0 R/Resources<</ProcSet[/PDF/Text]>>>>endobj
142 0 obj<</Length 143 0 R/Filter/FlateDecode>>stream
xÚ+ä2T0BCc3JÎår
ár
á
äHendstream
endobj
143 0 obj
xÚ+ä2T0BCc3JÎår
ár
á
äHendstream
endobj
143 0 obj
31
endobj
144 0 obj<</Type/Page/Parent 137 0 R/Contents 145 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 10 0 R>>>>/Annots 15 0 R>>endobj
144 0 obj<</Type/Page/Parent 137 0 R/Contents 145 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 10 0 R>>>>/Annots 15 0 R>>endobj
145 0 obj<</Length 146 0 R/Filter/FlateDecode>>stream
xÚ­UMsÛ6½ëWìädÏT I‘’œ[¹®:‰Ãšr¦] ƒ€RÕ_ß]€ú°’v:nÇ3´H,vß{û°ø6ˆ Ä¿&1ŒÆPÔƒÛÅàíÏ7‡°¨pe<™Â¢¼Š /T˯_Ýj4ñ«ÃQÄn=ˆ`^òÆŠJÌ
ÕøÐ¢¨'Á˜Ba@4–ëŠJnĺ¡-í„R]¹ Õj+pW-’—Pá*¥kfÍOPscØúìkJÚ´Ö¬¦úX5y€…j¶O5†ÂÁn8|Puåžæ¿C¦’hÖïå5,¯Þ|xÊò7ËkøÂµ!XÈ1ø^€8H¼ñaëç-×[Áw„AˆÓ#¢Çã=$ã(˜BšÄA5$S‚èß$ä¾'ÝÒdDù ÌI­Ò–­PŒö\²=׎ZÆéx¸b5þiæBŒh˜[Ø0+ÎIù-—SÂjNµ—€õ®î˜Ùÿ-|4ž"%$iÿB\~ÀýPÃ4:ní™ÓëMà,—«Êî˜æØUv…5/±…l` S+ËQL—']Œ’³IäôýF3”Jç˜Î`‡x!ñ…}È.}{¿¸=·\?sÉ÷P ‰ðÃPІŸlm>A<öþpɱqΛS\ÃíÉvHÒªBI2Þ<ËÈwÌÇb…÷,Öak
vÜà«Zyüß:ÞaEX`ôG„qÝÕ@kÌ'»cÙŒ
@@ -319,15 +320,13 @@ endobj
endobj
150 0 obj<</Type/Page/Parent 137 0 R/Contents 151 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fc 10 0 R>>>>/Annots 38 0 R>>endobj
151 0 obj<</Length 152 0 R/Filter/FlateDecode>>stream
ÙªÄãGâ7 À°5Ylæ´ãt‚·b;k;ÅðíGêöCYB;¶¨
ÕÉÏjEú·¤Î¿'˜øggƒãB’\D'ß®°Mˆ–ø‰ëù-NmxKQŠ<ÕÑ?±<…Œ‰aKȰàòq¬H¶™Èë¸N‹\á°¬·=Ã%<z°,Öëâ%ÍWêÁÒ
Êv×<½BýŒoµÌ™2œ4†mÛ®1!ÛÛ®»;ŸÒãËûùØ2¬3µße‘/ÓÕ¶TûÝÇy¼dæë8ßµŽ[Žúžï¿Í˜ñðµªE·y-Êeœ˜‰*]åô/)ÓMm1çþßf›u¯b øñÇm†ç÷dÓøÕ:^,ë—¸p¾ÈÒ<­jŒOQVŸm¼>ÂþnXZë_ŽpþŽëó²X•q–‘´Žö;|Øçw(’m™Ö¯x$6EYa7šï³‰êXá…ï„ᱟIÜϽ‰û‰6Ioo2×Ö„±:ŒŽ­£õ³(»ÂPXò"ï
ÈOW…«èÄ4L¬|ôbÑËÃ
Ö?ÃÇwБ \‹™Z¬!ÜC3 ÃÍ|Ã×â–år~2È3"Ãjlðœ@Þ¶
OÏ3ù©‡qÒòŒÈÀ±Í8¼k
xÚµ˜MSãF†ïüŠ>nªl­4²õÁ
0°¤ ÖAbO¹yl”²$G’‹åß§{F–ÚY3rÀ)ªLõh>ºßy§ÇŸ9`㟾׃4?»ŒÏ¾Þ„ lˆ—øÄóˆ_<Ê¥¬d‘Êú·ø/…8¾FÆîÄ
²¸zšG0+Óm.‹&i²²Ðø§Å…oy„Ç/–åz]¾fÅJ¿¸à/BVCµuÏoмàW;æœ:Æ9…gM¨?êa|õ0;–s®û»*‹e¶ÚVº¿‡¤HV’Þ…ù:i'–¶ûV€³Ã~þžû³¦gcÇÕËTãÜÍflœè­ndwE#«e’J˜É:[ô/­²MŽ6竺Ë7kÙ‡©\>ÿTÿÑÅõoýÜ­§\6¯I%áb‘gEV7Á²ª)‚Ûdý¹¡ö·èÄ‹æï,h^•«*És’Ü)V=ZM$Óm•5o¸k6eÕ|nˆx~hˆXÖ'qôôNœžjy¢|ÿ8˜ïØ=‰÷¿%|g:càcWè/°ñ½yUç<õ‘®S”ÅxÏyj Ù
ÙÎu|f[6:'}8ôñx‹þiÙà.Ž“ƒ êÆ¢4rœe€«5áŽãq~2È3"G7<'ÂòÍ<#Ÿú˜#ψ\ȧÈ{Î@8Ýi`¹=ïOöú¿ü%_ÕŠÎ;7˜hU\,Êg4‡²n"%Gô‰ŒÌœën²µ„›²Ê“¢L³e–* uržX®EéG³ÛÑŒÊ6èÉ·Qã;=©†IO-ÝêÉ€·zÚñm!#ÏÌ·#(ڞȻ¡55óŒ@Þ§¼ôüÁüõÛ›2é;Ú ~Éä}R¬¶xî÷Ìâ—¬ZÀõ"£ì}$aï8žÃçð{ù I±è$ɾo¤.Bêš)výUùèu‘– ò.#®’¢þÌÓuÛäû·Ûl!?ÝåC¹k5ÍHæIÑdéðê
;Áž(mL•PTã°”Càw¯¦@ûÆÀ9A>,H§&žÈÊ5M<#hŸ…VÈø#ö=Õûàñæ
¿õÃÜg…ìý,‘9ú–AM™–ë“z•T@›!Ý0dhG«˜h`…3€s2b<Œ<#È 'q#Ïä}ò]#ÏÊèt`þœ “•v•‘gò¡½üaňPè}KŠíŠñÛ2Y×X,U¸‡õݦíÉHþóÿh£ewR
0&ZžTå&u-Ïä=ª©Zž”Õé€ÿœ Jñ×òŒ@>0w‚?¬;°U†I5öÔõFí }SÄë
“†ZZKÄ@3s†u£ç˜ 'HC.îa#ϪÎ<Œ‰çi(èŸtú*ÅšxF ïÑÚÈ3ù`:ONPõGµAÏ¡Q?d
Fð¨Ód-•<±ô‡¨©¶i³ÅâïÃôEú˜…ú¥ëÂ,ñ
Ú£Rt'hÕ0 º¥µ^
@@ -364,57 +363,55 @@ endobj
159 0 obj<</Type/Page/Parent 137 0 R/Contents 160 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R/Fa 9 0 R/Fc 10 0 R>>>>>>endobj
160 0 obj<</Length 161 0 R/Filter/FlateDecode>>stream
xÚ­WÛnÛ8}÷W üä–Ö’ãK¶OmÚ‹.â¢/
´¸B…²¥ÁSêu´ßA¾êhŸ‘vRù+Ó»–í<H%Ü5¡ÕtI¢TEª­HJQIIÆ%k•?3NÄÆÂ°k(ˈª™R3Í9ÔÓµô¸×<¥j=û¯5«ÑÅí‘‚VÉ—Ø’ÎiÍÛÆ}Å®„æY¢’»4Ú5XïåcšJ7,+ªbá9†dp| zÞh‡±qAýÁP!ÕÆRpµ›±4N•z‘ä›SÇ%aÀRÂð A±B¯©COú@S¾’@OZàx‹½X{Ì6ìQf§å?(znp?Ç@ò.Åý8ò\,W0¨éL¶^/î²üyAŠ4Ø<
v›[¤Á–i°Ul»Kƒå³D\bäòÄÐåï‹]ë2渔ïùêìpÀ›ƒËÖ«Û$\^,f©À<ç©Àdr©Àe*p•
‰“]7ZjÔÛ3ÍAüs-ç8¡Ãm0Œ‹~‚^ÎÄp¹è÷ñ-^ pòqï4è¶Þ
;‰·ü^¹ãx8)‰â¤¦mJFW 2(ÜH=«hðÐ× A>ÝÕaÝù›/–Ó¼ÿîÿøú‘á¢óY8¹ÓôwòîÚœEL¶*f
q™ßÍ‘ŸÙÛ7/››ßoþ]¬³zendstream
endobj
161 0 obj
1013
endobj
162 0 obj<</Type/Page/Parent 137 0 R/Contents 163 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
163 0 obj<</Length 164 0 R/Filter/FlateDecode>>stream
š¢l©%©:Þ¯ßRò­ q,™Μ9CŽþd0Á¿ ¦súðjðq5øížA–ÁªÄ'óåVÅè^Zçß­~à³›öÙ˜. Žuö#Å^0³üV@IaYÁFíë­©ãC£=T¬®¥ÞàóÀµÂÕí½‰CdôÚ=˪©À”Ïæ´Þ’lšæä*ß2˸ÖgÖ"ÀŠvÒoq5Áø6Ö4õ8 ý‚×¹áài„3ÐE‡6_ŒóÜÊÚ_¬§d%=óÒèôé¬0–üdª.D¿Ϭ\VL¥ç„!N>Ooç“´‚Ì%¸<1ä¼%n†Ê;ÃÐz£ðjl¼eC¤²=A+%JŸx“X¹Ùú1„ ý¦ñ0çl>X¶–ü"0/žýëî~“…ßþ‡«¿• Ó¬ñþ=ĨÓ.¦ÕwœE¶üNrÌavŠpýðx÷ðǼ^øÙ*èÎ4V
~_‹’qñºë‹™ÃÚ¨b ˜<c?‰dü’¸É>yÑü ñnqGšméÚFÅÕ(f¡[¡ÀCyO˜m´Ú_Æ~2©‘…!2ˆl"¹{Óa~·5*HôJ:¢‰t“Âðq_¡ûC’ègr'Ô[`sÖÚî¤R. FA0ÄGavZ”r²-Þ!àŽ|©1å$½–ö[È-íÓ<ÒN0½iØFÀ½T³HZ¤s2¥*RiI¦PˆRêH2Þ²Fù#ƒàDÜXîJÅ2¢j& £ÒœCœv«Áˆ;䔪uOì_D­Y…!®÷”´R>Ç-é(kÞÔîû0îJèž%*i±S§]õ^’» „YBSé†Û’ªXxŽ)¹X>&£Æh´Ãܸ¿3TH•±”\-Â`,C¥žˆ|uØqɰ”0=èP¬Ðsê0’.ѤW2èH op/ÖÕ†{”Ùhùš7¸ßim<>Kg’årvd1żMq²H—˜g´xÊç 8Ï?=;u‡÷F˜öF¸é°è°ì!›ô‡è¯ˆ¬¿$²7k¢q s\Ê7Ï÷åÛS¹Ã.Ãì\²\Üô…ÈòÙä
Ù0ò+`L¯€q
NgWÀ˜_cqŒÿ#Ó$_âü³ÐáiEmþ»†slXBsNÏ®¡8mBcvrüŧØ!a#À©Û¡¦€nªµ°ãØ„á×åH<- Ñœ`šº`ÔiC¡]$xVÒ9L?O ñ,n;©e^6›§Y÷>w_¿<ƒƙ¡ïû$œÜhº„W”ö-"‰s’E8 IÞN‘ŸÉë
ÙçÕà¯Á¿öùíóendstream
endobj
161 0 obj
1028
endobj
162 0 obj<</Type/Page/Parent 137 0 R/Contents 163 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
163 0 obj<</Length 164 0 R/Filter/FlateDecode>>stream
fR˜wÞ˜@S(…{UàtKFपqe㉊d7èÞ $ôŒ§ PZų‚«Û÷âmPÏæQ‚@f®Ì%ÊB¥¶®„éГ:ÇÌ ƒJ×OÆ—cã¢ð9k)ÍuQè;©æºåî(dܰÂÈ~¿Ül
xÚ­WMsÛ6½ûWlٜքDY‘¬Ìä :öTÛi­^÷‘ „šŒ£Äýïݨ3’{jÏH&ñÞîÛÅ.þx@öàxiyðëô s>dÓW' L³Ãcv “‹38—…°¯¦ÿ ¨I@qoÈ;ýóý5ÔVXpw:r"€T ë¸Ê¸É Õ*—óÚp'µbÁ:í¯ìX¿qË(e)˜[V;[ ï2KEBp͈TÏ•ü"²°`(…tXiQ™Î1 Ú@©€Â3ñÕøút2'>;§º,…r$'ǬG®ã2î¤[x•®ÑöÍaôctó
Ò7<uÂ0 ¡3žÞÚ‚Ûnn å
fR˜wÞ˜@S(…{UàtKFपqe㉊d7èÞ $ôŒ§ PZų‚«Û÷âmPÏæQ‚@f®Ì%ÊB¥¶®„éГ:ÇÌ ƒJ×OÆ—cã¢ð9k)ÍuQè;©æºåî(dܰÂÈ~¿Ül
˜‹éM¨‚.Œ¨°jã^?DG5{Ò›·àCÔ‰‚™¯pýÞóáߟWºì„h‰”¯ñøK÷ã¿¢o‘+Ûm ~Çþ“ùÏn<ÚAöÎ=s#°î0 {(¹Ã-¹¸Ã
%ü|€BÏ%òa|ùþÞçƒÜ ÛèëêÇI?Dë¿?@­¸YÂåÕ4p6gyìûx°:ÍW-e8w7ðCz·P>ëmœ?2š.+´¾…S€ö°ôŸKJà¬2·0[: óÇg·Œ3˜ÉyŒç¯ä
ϼÕ)×:ÖJm]l%Q9æC¹`(—ƺÇ[/Ì,¬ÕOÿ×`ÃGa=o´µj<k´=sά¯­Ic¿5FTFX4“ÃêÚ¤‚bl Ï„E¿R„Ïà|÷ÌÁ a.8æÈº¦Ãn»48“n—ÆÆH„O¨Œž^Ò:Nf“|G´°8Õ”v`+Rd2W2òdÅCFébe:0JL•$üUª±™IÜhlÝåþÑ·É5èæ©G>Lün´­«r¸î¼ã^¨Ê>\U>ßqÏ+¹ §,%ÅÄ¡.3ð‡>Цê`,Ü©ñÕÅ6‚¨ CÈv‰÷‰2Ü’Œm%ycÔÂÊ¡Üfo»Ä=máÒNZW¶ST™ÖyAOm¢yæ›
»øÂÍŸgËBxÌíO¿]]œuØ~Ÿ¬I»]ãmzcXþOéz§­Øsè}mZÂ<‚—ÄZ7ßš¾!#awš›§Æ÷:ïW½³¿êÞ¡aPä"Dö6ôÒƒÆØƒÁØI|Òëâ
0zÝL_YÚúœ¢Fx²ÒWj¤7Bô8y=@V<ìuwÿsÒ?é²øÅ!=ŸM~?ø·;ؾendstream
endobj
164 0 obj
1191
endobj
165 0 obj<</Type/Page/Parent 137 0 R/Contents 166 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R/Fa 9 0 R>>>>/Annots 45 0 R>>endobj
166 0 obj<</Length 167 0 R/Filter/FlateDecode>>stream
D>¦;HÅTï0´¡ï–²Û}p„ŒÈÿå}ˆ¹ø\/÷-8¬~"nS) ®óÜ
ÑQ…PsÜó'˜•‘ÊñY!^Ķéó5¼|ŠJMÁ¥²{ü~¿lÌ–O¼¨Å“ÒÚ¸—1_/¡:å!Ë[qµÐë£ø…
%ü|€BÏ%òa|ùþÞçƒÜ ÛèëêÇI?Dë¿?@­¸YÂåÕ4p6gyìûx°:ÍW-e8w7ðCz·P>ëmœ?2š.+´¾…S€ö°ôŸKJà¬2·0[: óÇg·Œ3˜ÉyŒç¯ä
ϼÕ)×:ÖJm]l%Q9æC¹`(—ƺÇ[/Ì,¬ÕOÿ×`ÃGa=o´µj<k´=sά¯­Ic¿5FTFX4“ÃêÚ¤‚bl Ï„E¿R„Ïà|÷ÌÁ a.8æÈº¦Ãn»48“n—ÆÆH„O¨Œž^Ò:Nf“|G´°8Õ”v`+Rd2W2òdÅCFébe:0JL•$üUª±™IÜhlÝåþÑ·É5èæ©G>Lün´­«r¸î¼ã^¨Ê>\U>ßqÏ+¹ §,%ÅÄ¡.3ð‡>Цê`,Ü©ñÕÅ6‚¨ CÈv‰÷‰2Ü’Œm%ycÔÂÊ¡Üfo»Ä=máÒNZW¶ST™ÖyAOm¢yæ›
»øÂÍŸgËBxÌíO¿]]œuØ~Ÿ¬I»]ãmzcXþOéz§­Øsè}mZÂ<‚—ÄZ7ßš¾!#awš›§Æ÷:ïW½³¿êÞ¡aPä"Dö6ôÒƒÆØƒÁØI|Òëâ
0zÝL_YÚúœ¢Fx²ÒWj¤7Bô8y=@V<ìuwÿsÒ?é²øÅ!=ŸM~?ø·;ؾendstream
endobj
164 0 obj
1191
endobj
165 0 obj<</Type/Page/Parent 137 0 R/Contents 166 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R/Fa 9 0 R>>>>/Annots 45 0 R>>endobj
166 0 obj<</Length 167 0 R/Filter/FlateDecode>>stream
—Ë÷ÃOo|Z-Þ! +•X«B9…7€#E¶;äŽ1ˆÚXNë=½ûcù€@žÔšmªÊÔ®;5²•ÌÔFe´‘Â5µ ±àwE¡¶Å ? ˆƒ2é0-A‰‚ßôЪóÁòVƒ8ŠA7ü•ð×Ç_)™Þ “äÇKJcü†]AŒŽ‘›$‹c¦Ù†ï4[)Wr¯›\Ä=“éxB9š|)ß—€ü<À³ò=‰’Æø=/ß—€ü4Žæçå{%MâÉÿûO'ô÷% ?¡ÎŸ¥ääH½=d±MÏϹA™®d¶»7NÒwÓ8¿ýš^¡[ŸËWS‡
xÚ­VMsÛ6½ëW쨇:3MR_V:=´IÜñ¡5V{Ê"! ) °hWÿ¾oR¢åXJ:Ë@.v÷íÇ[ü=H(Æ_Bã²rðËjp}Ó‚V~2»Á*¿z/­#-Jy­´uBgLå”Ñ?=Š¢9ÙDQôìÁ›ÕçAL£$Žn‚®hŠ îÿÑò_º¾P’0Ò ŽÒ+^í$JKZË­ÒZé-=)·£akqHJç*NZrÍ[Gr„HiÁhcjªj¥}6kû#‰ƒ”׬´?ÙXYw¨ÆQÊÆƒ‡´QÜ”u­òf6P‘w:ìÞ:YRï\Y̸¢ +¿G¨žÃ¾"´‡\là¨w[Öô—6O0aüëÂd¢ ¸ —^××fáÔF&4IBïɺš
K…t0c Ý”k¿:aÑ9ö™©±¬Øƒ$µÈø#/¤Þº]Ô¯³Ï™«e)+`®Kef´Ãc |…B%ã­D&GVVÐëÏAÛy¡jòeb[¸ Jæ-ÜqÌ£)-uY­*GË6phÿ€óq|Øçá`瑯´ ‡?]
—Ë÷ÃOo|Z-Þ! +•X«B9…7€#E¶;äŽ1ˆÚXNë=½ûcù€@žÔšmªÊÔ®;5²•ÌÔFe´‘Â5µ ±àwE¡¶Å ? ˆƒ2é0-A‰‚ßôЪóÁòVƒ8ŠA7ü•ð×Ç_)™Þ “äÇKJcü†]AŒŽ‘›$‹c¦Ù†ï4[)Wr¯›\Ä=“éxB9š|)ß—€ü<À³ò=‰’Æø=/ß—€ü4Žæçå{%MâÉÿûO'ô÷% ?¡ÎŸ¥ääH½=d±MÏϹA™®d¶»7NÒwÓ8¿ýš^¡[ŸËWS‡
àLQ¿%Íx„Í—qôJZ°ÿç¤{¨Ã$å”Ä4¶³Ð8Ï*›þ'ñï$û;hŽÛà\ï–4´ç‡œÔÖS(‹û5òàƒþˆÈs R'ƒœµ|"á@¯ë&L&´sÀ±'Ö²0OG_NÙÛûÔYSÙ[ßè/mˆÍÖRùÁ&xÄ<úq%˜oÛ°ÔM!;.æN}´o#”›×jMSgòÚí+&lËÄd¶µ(ÏNêþÔõ'á™°¶)¸^-¿}o½@Dwý1×’`˜‚Áƒ 'WµÌ\±/8ã¢8!Ð@‡4
äuÇ1ØàBÅŒ®¶ºOì||”`Š$4šC+Ýð³Œ;§ø[oR˜ ¿þ 1ÁÕendstream
endobj
167 0 obj
1197
endobj
168 0 obj<</Type/Page/Parent 137 0 R/Contents 169 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F5 5 0 R/F6 6 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
©{u-•ÊüR¸Sîß„nDñÎTêK ï}mL!1NQׯ±¥àãݲ%é¶ÜIˆ:عÁ íð#àÕž@ò¨%/¨ô XÌßü Ѫw w+8¶…•—ÐŽZ“ËâÞOýó`ÙÕ-³Ø.®ö˜ÁãØ*Yo{`/¡!lº H7=ÏÜ R”È?76DÏ4®jœ¿Ñ :±…²n½¸„|â‘/kÃëûª:3…¿ZšpCüš¶Â 7EÃI
­•3Í8$[”¥ UÆ þÁ{ ÖpªL°N±N±NÓ ù¦u7IyºÍÓp
äuÇ1ØàBÅŒ®¶ºOì||”`Š$4šC+Ýð³Œ;§ø[oR˜ ¿þ 1ÁÕendstream
endobj
167 0 obj
1197
endobj
168 0 obj<</Type/Page/Parent 137 0 R/Contents 169 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F5 5 0 R/F6 6 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
169 0 obj<</Length 170 0 R/Filter/FlateDecode>>stream
˜8¡¹Nfˆ±v¥ïÛývWü8 ÀÇ¿Æ!D1$ÅÙ‡ÅÙÛCXd¸OưHû‹…óÅ7\Š«¥¾¤Jä¥f‚»…Ú§„§mc½]Ó¶ÙÉKª  [XRè
xÚ­WßsÚ8~Ï_±Ã½›âúèôn&%i'¹Ëz3É‹°å Ö–¨$‡ðßßJ²
˜8¡¹Nfˆ±v¥ïÛývWü8 ÀÇ¿Æ!D1$ÅÙ‡ÅÙÛCXd¸OưHû‹…óÅ7\Š«¥¾¤Jä¥f‚»…Ú§„§mc½]Ó¶ÙÉKª  [XRè
z DQ@`Ãò4!2õào½¢rÃ|ØBQ*N:YàDf^»½ýö ˆ¼Ðÿ܉RH8ôêßД‘ÅH‰Ö’-KhSš1NS`Ü ··—±œzÆ
coد”rÅôö„`Ý“¢ Ñrçƒ5±¾Õ¶@Òo˜‚r
+ü'Ù#à ›‚ÙÍWHDŽßœ¯Ó^´÷ÔÐD†¡ÄÖëœÑ£à“LSyŒßsˆÄsfÓêêôGÞÈ ½$åZýK¥:’ßTŒ¤?J&M#5d |Ä`lV óøàö©³/·s¸¾¼„
–K©ÐµH­I ÚDApåµâ0+¥D¥ä[`ÚÔÒV(<ßC/ðüž©|z;žã
{Ö<c˜'+š–9•0<c÷¥tiúˆÔ1ë±×èF5ž’’T•PйÜßÅQVõ& Lò@XN–Èqx1aê
ÃT‰AÒ+¢ßÕL§f3Lô : Ù]ÿñîþhöùkãIšÝ!î Zø~¼^IQÞ¯Ž,Ãðyš¢Ç´$\eBbÒ
+ü'Ù#à ›‚ÙÍWHDŽßœ¯Ó^´÷ÔÐD†¡ÄÖëœÑ£à“LSyŒßsˆÄsfÓêêôGÞÈ ½$åZýK¥:’ßTŒ¤?J&M#5d |Ä`lV óøàö©³/·s¸¾¼„
–K©ÐµH­I ÚDApåµâ0+¥D¥ä[`ÚÔÒV(<ßC/ðüž©|z;žã
{Ö<c˜'+š–9•0<c÷¥tiúˆÔ1ë±×èF5ž’’T•PйÜßÅQVõ& Lò@XN–Èqx1aê
;©HKÝ.ƒìS*ò\l\ʺÚ^æZ™[²l!jœ1H¡cäµi%úQ¼ÑØ› ܉ƒ{Y{£÷Š0ºæ½m7ëzR^-Î|ÏÇ»AóñùØ¡–pàOÍç¡àÙó'Œƒ(ò¦•u„§÷¬.6¡?qáý̤×FìÏá÷oíš}íÎÏÛ™I¹7Xu8m²¦Iw³ &”ÛÍvµgÙ8kÇfgl,‡`W@/iFÊ\ÿb*M‡OÝöfDhÆÉ)4G1ŠàdšÖº“f4v$.’„¢`œ0Y¬iÂ2fg5×7 Ûñ1£·vN7ðM,qh߸k`]-ª°ÞWªÜDúKô^"ë>O%k­«› S„_p®¨[ÿ+ÁâÇQŠu^;7µLi’ª¶íý§’Ú…ã%*þ¨‘çËÅæ¬Ÿ(6KeºP~ œS97-ª“ŠÁ·´vŽ&ÍõvlP43ÝUØ´ºñŒ—abÒø™Iìù's±Æ]TÆÑŽÈO_CÃÞó^Ã"ÞUÒË,â]!³E¸h[/ß¾RY\èÿ¡®áø':¹5î¢
$9QŠâƒ©
K¨zw˜Ý½°Wæž9î¥w(Lw:Ê&ÏëTg×'Ãw.6Ü41É­Ò´ðÏìïmÄ‘þôùfo”7¢b-$3_Öˆa#dŠT'ž“Ärë°Ô~NÉ_‘çB*îzÈ´Ñ‘@wJ¬pjÙì›9$ø¤˜ÒÊÀŒl !)侺˜Ï®¯Ac9x¨ÑÂöH·¨4‘G^9ø¢DíÜõ{¿õîÎ[%“¬ˆÄáTÅpOHW‹“ >Xæ„·»}ÕncN
;©HKÝ.ƒìS*ò\l\ʺÚ^æZ™[²l!jœ1H¡cäµi%úQ¼ÑØ› ܉ƒ{Y{£÷Š0ºæ½m7ëzR^-Î|ÏÇ»AóñùØ¡–pàOÍç¡àÙó'Œƒ(ò¦•u„§÷¬.6¡?qáý̤×FìÏá÷oíš}íÎÏÛ™I¹7Xu8m²¦Iw³ &”ÛÍvµgÙ8kÇfgl,‡`W@/iFÊ\ÿb*M‡OÝöfDhÆÉ)4G1ŠàdšÖº“f4v$.’„¢`œ0Y¬iÂ2fg5×7 Ûñ1£·vN7ðM,qh߸k`]-ª°ÞWªÜDúKô^"ë>O%k­«› S„_p®¨[ÿ+ÁâÇQŠu^;7µLi’ª¶íý§’Ú…ã%*þ¨‘çËÅæ¬Ÿ(6KeºP~ œS97-ª“ŠÁ·´vŽ&ÍõvlP43ÝUØ´ºñŒ—abÒø™Iìù's±Æ]TÆÑŽÈO_CÃÞó^Ã"ÞUÒË,â]!³E¸h[/ß¾RY\èÿ¡®áø':¹5î¢
]á_óL´X\ØÉ[’¼ºÑÚS_NAi'×ÉófÒskÜLªqcš›ù½kÁU×hsiÉHB§ »çÐç3¨œìíÞy^5Wl~són®½Ã‰x¬Ã´"øÏÙìßQ¦endstream
@@ -433,8 +430,16 @@ endobj
\x"-£0r½ÃÇiü¤&§Ä-~[ü½º«DµÐ1HÀÎmé%‘Æ$(1!mÙ¶V…õµÝ‚Œí•6ç@¥0ªþqŽÙ©‚ËrŠˆç2 àÁi"¤&SO‰["$¶DzuG$\‘ÁÙ_bYbÒ‡Þ#vÊ\<ˆœjL•J¶¡´?ÈÞìý€MÁŸ¨%ÝiQ;çÐ(jbå|®USMõ¦0Yªú4,«ž ËŠGaEë62ÀÛÍS5lb¨RŒð10è\@•¨1¡Þ3à3 †´pj¤õk™¶°®äNh3I+Lª´H=—‰GiùKkÿ‡ÒH\dY-~ ° ŽÝ£ßqzœÝ׊g)׆q;Õ¡H]ÞÝÜ™ášÐ…XÅÓ vŠ“N<38z.'q
V‘=¥¶œæ”¦ž áÐBm‘zÜKèôãâ­÷ªÉ³®ðO@
–Á¡rOC²ê™¬xRØÊm!]‰òéÿgT*3—S¸~E=·ê¹œÂõ‰zøá1§k¼ÔÀélÀ*ô&ÎeÓ]~´€þ—iðÛ<
AÜËÔ?UþìNi³÷¼
OçÒè9¿·"3½œ'TäZº`ï
QŽÑjª ŽãÚeV×»4Nâ¦É¤æ÷¹ž(Tcvê(]'ðúë× ¬zæŠÇ~t”©ÖÙ/wJÊÞó.<í–†¿òU8Éå<ãe6ÀÒûÑỪžÉ€Vw¿ŒrpÀ9Íé`”E•ËTšfÁ©l:4eN5t/†ýÏç¼?àógFâÛÏpÍÞñáš4Õ¬EÁ:ù|Mr—œ
¯ÿÖ`Oè­š6甸
Û€èÕ]@¬ÖÇ;u—Ÿùe‰CVÔø¥´I]þÀeŽ)Ò}%¡_ˆ º‹©,Y&¯hhËd~?#íXŠ“ãnv£j3 ’„þéCÒÝÕ
ð€«n[…”\¢ckˀƼšE¯è\Q4¿qEщ¾ú=o"ç/v­S_)‡=\$ÞjÊn«'ÃOËÛ^-×CóñcD%6œ9ÒJvý‘wWàU{ö!J|¶ ˆßµª-Oƒk¼Ü•lp›_Ø1‹vO-,ò7l{Ú ßÈØ¿ÎþýZ2endstream
endobj
173 0 obj
1479
endobj
174 0 obj<</Type/Page/Parent 137 0 R/Contents 175 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R>>>>>>endobj
175 0 obj<</Length 176 0 R/Filter/FlateDecode>>stream
X[oÛ6~ϯ ôÔ±­‹¯hQlMÚ5XÖv÷V` %Êæ*I%õ¿ß9¤,;LtÉG<ß¹}ä¿ á'"‹˜$s’–ï×SEd“8žWd¾œ‘uöênÏRžs¦ %ZV*e„ŠŒdL.¨áRšeŠiMr©^¯ÿ¹É(JÆ1.V¬ .¶d£äƒfŠp Ò-Ë•,‰Œèj#˜!Fz«©fÇÔX_„ãvÝüúöl4ÁÎâñŸ‘él<'Š‘»g°Óy _ÞÛ-­,\Åsø<Oâñ÷ùÞ:w·“Ê|¦%Ó¸ß(\Á¢¿>¸Ú„‡H}Ø1ô‘HEÀ[à€ì•¼ç°‚öˆ8<ãåû«nv²øŽ‘à öž©€ì©2ß_cÀ±R¶¸0Lé
§èIŒŒ¸-'èf /Qby±hëN¸&Ñ‚ãd TÐG
g«äœÂ5/¸åñ—„aÃß‘‚H¨Ê
@@ -469,42 +474,43 @@ xڭX
endobj
179 0 obj
1566
177 0 obj<</Type/Page/Parent 137 0 R/Contents 178 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
endobj
180 0 obj<</Type/Page/Parent 137 0 R/Contents 181 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R>>>>>>endobj
181 0 obj<</Length 182 0 R/Filter/FlateDecode>>stream
½Md|'X¢wl+°#{<äÂzìnˬÈY®áè`I1¥«Z&Ü~Ò"ÜcŸjSÜftÎs3^ä:幌xØ0ײ‘ïÑ@iH<GBÄ"öô~s5ñ&@`ýsÿ‘Sä,\Áb"i¶F`Ç3`? 3B;úºÀAЀƒ
xÚµ–QoÚ0…ßùW<m¤Iœ„°U•ÚÑNHëÔú°G“8à.µYâ´ë¿ßµ`0BH§©Eø8>ßõ¹±ö<pñσ¡$‚ä©w5ëÝày0Ëp$Ї0Kß]Ód BŠÁ<§âä\0(-T /\-A-úÄ@f@!"㋪ ŠK)/X¢ø3ƒLæ¹|a)Ì_ãÔgšWÌÙr=ÄÅâýì±çÂÀ#ޝÞL. *‘²¢TR¦´ðì&¬†C'†;ž5^ÏÒ"ŸEEÿÎʤà+mK\Ïz®ãb6÷ŸÁðáúž;r"ðôW\{z@ìâŒj5ÁÕ‡¨w*éGú©ž~ú¸L†.,­]%²#ÓKxÆ÷eɰª…)íªàBáwŽUXOÁ^àQÎKné+ÌÙfʽö¿³²²€þWÙwZÀÝ i-8|«FpƒŽŽ¢ó1Ëh•«»C›¼Ø3y~V^ü]“ª($î|¹S‹”e\p“° Ù¨þA/‚ÿK¬É^ l8ÔŸ§ÂZu#läÙì]ê ?”Ó-ˆ»»µ¨TºW*­C,ªL¼iÝJš}.wˆÛ`°Cd­ú@d-LàÛ]¹¢B°bª;½‘F[œÁZÇØç ·_
ÏQÍâclÛhH丧Óu#O¶,×"} ÍtæÞâmêoÛP@ܺ¡ÆL¼¾1bBªŠY0j’y¬º‰'ˆÛácöÌöp?9º5©Q
ª‚UªàóJ1ÓûÜãMÇŸàÞ¨ÝG¡íø‰ÈäžñKPì—ªh®ßFë#GïF«a—#Ȫ­‘íç/2¡ëÓï Ý¼¸ºÕª{%øæÆqþŸ‹6wïö#Áª›Ž2ªãïOÅŽFÛ˜Ãò—Z¹WûP¡Ï÷þ$Í™=ȧJ®V,m;ÍIÜ%îVÝ”!2¬ãnhnñ­AìÈûg¨'«Ü4j‚Ä„ÚlAn㈺ô‚U¼ŽÅõuÌ #G_zkøôp7…‰v“Ñ„ÞùBÀÞeq`ç êIÄÑa­!JG_yµ*ÀKBl‹á‘ê[ï7QÏùendstream
endobj
Ìh†«X,ˆrù$Ú n4–€T»ßXÄ!½»Æ#·þ©”i–ÈHæšqy€#{)ä´;ÁÁe6ÇÕÙðOUž%‘JŒà€-×oííœöb‡–Ü&ËíÈ_ܬ'Ò³pZGzx“îHÚ1ߦH˜"Ý ëHO–”òkPP„V¬QsþIè1éYéèi¤dhUiÙ‰Tyl³o‡Úârž0ÅS²=X_WA/,Ðì[S™jj«MJ7+¹HÛCötÙ¨Ñt?dÚ9ß&² Ld7èŠìé¼T£µ6y‹éyè_V!Î2XÁT>BE¿‰_ç@ƒ¤?V
‹L+ÛÇÆìgD†ÐE†À—Df8ÍX©òˆg->Æ"ÆÙÑ»Žvzœ~œ½æ›H ø«Õ. «EECÇc?d¾‡UÈ(®
c„Êi±0ÖÉV”pkIÔ[F@ËѺËcì‹EŠéKŠê†ÚZ¹J:6 biùcÒÛHÃÕ*xh#%ôÀFJàK4¤©§ì¡÷Z·ówüÄÍØfZ'ã¨Èl±Iw¸Ê6JƒHŸó‹e©>ÖY·ó]eMÐ㼓ó
ºv~¶¢˜Ýß­oy´oÏË´{€8óRjs© oxÞV8KB}¶E0û(šây‡3/siæI˜7qJsÑK’æwzý'”KW†dà) ;èXΣœª¨‘´—„`Qëû€<qè¡yâÀódâ7T>1€Óƒ:vý|7­`.+NUEŸÕzx§r}À(9‰Õuä
182 0 obj
831
endobj
183 0 obj<</Type/Page/Parent 137 0 R/Contents 184 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 7 0 R>>>>>>endobj
184 0 obj<</Length 185 0 R/Filter/FlateDecode>>stream
xÚ-L»Â0Ûï+<ÂÐÐ#Ú•—Äâø$Ò’öÿÈ–,Û²_Ĩ?`X§ôOZ Íö
˜!¼t†±š×Û›ËñŒCC‰W°
Cºg_R?¦.OåAÕoSýG¼Ðж-¾Ög,ú’ôe0¾ËQûЉ޹ $íendstream
endobj
185 0 obj
/ÑîÑ›‡Û»;¨²çÜc·:M1Ùè¥Í¹)'7DèF÷¯¯®¹þúº{n`¬Æ+_T_0ÞÃ\Æ”V7 Wßœa²kÃNó\²ž´ƒæ»haóÍAÂÒ'žt._A¼['ªÓç88:°’kÿJì-Kö|¸Sùl¾šÒ²²M#‡[ öNX¹SøWddVu©Zu³\¢ú> W¥~]ˆäÚßWÿæ:“éendstream
123
endobj
186 0 obj<</Type/Page/Parent 137 0 R/Contents 187 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R/Fa 9 0 R>>>>>>endobj
187 0 obj<</Length 188 0 R/Filter/FlateDecode>>stream
endobj
180 0 obj<</Type/Page/Parent 137 0 R/Contents 181 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 4 0 R/F5 5 0 R/F8 7 0 R>>>>>>endobj
181 0 obj<</Length 182 0 R/Filter/FlateDecode>>stream
xÚµ–ßoÚ0Çßù+N<m¤qâü@«*µk7!­SWèÃMri]¥KL»ý÷;ÛVFÅ_;ßOîÎç>}$„1dOƒ‹ÙàäSŒÁ¬€(ñRˆÓfù»KYc¦å3¾Ÿ=z!M4÷±Éj¹Ð²Rfäj6ð=Ÿ]ÿÜ~†€{â$¥Õ˜?öb`c/€aºCÌÂзê0H½äµuÇ[wAlVÌ ù8Ï2$êÞ¸pO‰éK#ÓØÀËê¬~`QK¥éZ6 VSAá <Vóƃkñ æh•J<acVõaDÜöiÃïØ ¡ªaøµz=àÜu–€.÷ƒ[µߨ Üá’†§—Xˆe©oZ còlËäéI;zö÷;YÖuµTyóê]äXH%M(¡ 6an˜‡ÐCïG˜‘>XÆ=ÿpX«î„õ™lYV/w
ÖÍÃX¥l4T,Ž „A‹ 3sЕróŠ·%ó#Ö©w$¬E‰RF£äùB(…õT‹ZwÒs«s ”¢ÎqN)IA¨l²$µT„OIÛG“D†ãP«î¤‰—FŽæJåoa…ɹ· D›‚:ÔÞÔ%ª_oL2UéK´0![óXu'­8žg™áÝídohr«-k BëZΗឥëŠ?À½Uwº÷m¯™¨¢Ú²}ê¥(Í^´j8&åãcSwåiäêùK•‰UïÛi·lGzMÆGT«SïöÛMÿô?5>¾Iïþ–àÔ]-‡mzÓªqoj[s€Æ(·ÞþÈ„2ý}8ÉKt|ª«Åó¾n΃cÒÝ©;³ˆEk–kÚ3Ä=îÙ}Võä”ë2Í(<¨ô:0¸Â?ªüÎÃXÚÆí²æi]ÃÇ»›)LŒ›BdtF”÷
¶ŽŠ#7gÔN
=“¬-Dãe•*ŒŠ'¦¯Z [¨oƒß¾Q¿ endstream
endobj
xÚ•—]sê6†ïù;Ü”ÌÇ2þ¢3½8$iK§=Ã9»Ü[7²åÊr€ß•d“ÀÁ˜Nfˆ±_­žÝ}%™\ü#y0 !ɳÕàá×)x.¬6ø$ŒbX¥#ž÷ŠÉ‚r˜x±¡ «îVÿ-‰¬v<ñϨ_Êr)’7¦`!…‰àVî!Ü‹œPËW[öI^6rÈ* Äãu¦ á ¯W‹‡ù*+LDQ°De¢p@‡HÙ†Ö\V0ùž% J!•Ž3%®kDšg& úò}9S[BAs¦¥C}è4R/tüëuÅRX@¡âw¶ãLaÎ4y£2…?˜zÊ$RBÁÔNÈ7ÈŽåÃìR „7 /“Õ=ÐêŒpÇ8Ç»Óâ§ðΊTÈê'
‘Ö‰ªX2f¦|Y,a)6jG%â¦yVd•’T¡þ¢EýÛ ±ª.uXz6ï1öMölAt¯Í|3)vUVü}[£/1͆—'ÝßñššŠJAÓ„Vªí¦³Ã±Éj‹#Ú6‹’aŽXQQ`÷Ï29ñB8!ç}¦ÉöÓd%5
NY•Èl1u]+…áu¹(hlÎlß°XÌ„ÓÊ6Ó:öËòq>ÅöH®¤ÎÖ%(ÄÜ3¼õAƒcKµp—©-ÎQ ‹²‚ÁëÈÝ»ôõÎú» †“` sª°iÚÁ9Vóg[u¦ºè¸–ÇžoT‡’ÁrÑ$µÌô¿! ÕËgh¾eÅFØ«œ¾±1æ3ÎEÊø¾þicÓ¦£cÝtt©cÞëˆ÷І»êÔ£{S Ó8£Ó‰~)YU
ˆµÓ}˜/ÐæÙÈšFŒMvç!Nµ'ö¶£||²N:¦j½UßUŽ^º«õt:´Fû8§uý¼kaïÏÇ™¥¶e{š²$ËqG(ê|Vnü%Y‰Ug…Ò_ZÒuÆ3ux06½¸uZÐ$¦q–)ý<Šð¦«o<™•T¶{^
\ÇÅCçøñý7\!ÞtŠûš™âpÜ–—Ä‘6¶“0t‚Ojszµ©?ÖQcƒaÖÚÍÈ…_ÚU|¶$ >1‹º7ÔIš˜fS¼ÎkÄ–÷C¼
¥OÌÔGÊFcjÃñ ’åBŸi¯#ÊwôPy½ëKÀ#mÁý¯®'`Ä6õGnlëêSpÅÄ]Ñt³>"W—æV ñ X"O­%'׈ð𲇊ē¶ÑýTVÜM¹ÍKÒeª´.9Û÷…¾ãÞ dÄÝ@q^p·UäéÃñ}'¾Lj»qð„6¯œaG}lô9ˆ2c}+”xÁí;ŠÏãœêͳÍ
o·ºw²M'Öéq‡Óëßq¶‚÷,Žn7z]óyÔü˜^FJÄ;ë[va|»É&ÌÜîe–ufÏâ+(åfƒm'Ê$°ö&¤cÁá«Hï9ùŽÉ®S2>¾-¸Wáù‘^¯–1hȾ
þœi¥nendstream
endobj
endobj
188 0 obj
1130
endobj
˜!¼t†±š×Û›ËñŒCC‰W°
Cºg_R?¦.OåAÕoSýG¼Ðж-¾Ög,ú’ôe0¾ËQûЉ޹ $íendstream
189 0 obj<</Type/Page/Parent 137 0 R/Contents 190 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>>>endobj
190 0 obj<</Length 191 0 R/Filter/FlateDecode>>stream
VmoªXþµ1i7
123
ÅÛÝM|×D[ײ›Þ¤_ŽpTvñÀôÚ?~gP­oUÛÒ9Ì<óÌ3s8ü(iPů5‹~Üe©é”î»h83Ð [ÕÀ²Mp¼[M¿sþ)é¶Zòáwp™€(öE
«ÒêÍ žsÇ)UÕ*føø3é!¨E ¶jƒDÓêª1‡—SΆjäΚe©æž7RÍ Z&Þ&Jµ¯)jöF¿–£YW­«9JçóÑ’œŒ¯9Ö¬a_ÉѨbòk9Jçóõ¼MœÌK×,öÙ4àøÿ}ÍO×0ϵü¤ó ~÷Ý:ºÐHVÁ¬kÄÉ@ÄÖ_ãè†ñº~À‰Énv« `9RòÛ Ý`û:æÖ*áLß!]ð 0éæ8·3 LÃ(ù KÑ)©]Qz+—ƒ÷.ØÒwaÊ„À;S2áQ$ÒÑjXÒIVQÆ)†q)(¦§‰šûéVÖ £¤ï'8,ÄOɲ(
|—¥~(î×ÂSÝU”(„~À^ÍlTÕ(ĪgYQWlÛ.SÛiŸ¶à7 ƒ üé‹9ùÇ7ö§ÈŒÄdkærPxÀ—\¤R `iŠ>«”ø `E}+
ªS®š‰\>ùí—Γ3p¾CbޏåV»á4Ê (ˆL èñyÌ[Qþ(ôÔ²1Ø o…ʹ®\Z%TK2é5¿ÁÍdÒë5›Àèó
@@ -542,15 +548,20 @@ endobj
K7„[ž0Éxœ”á}߉Iæ­C;Íg†ÞÌÒb÷ì¾}NÀ¶Aƒ °ûr¯âßņÔWxø|ú
zž_úƒé¥±?O‡OCºI9¸Ê® - lÈ…äÎà‹•ÙñI}(‘®ÛÐÊó¾Æ4IJˆ•â…,¦/¼J ˜/Xkf·<Ô—ç¬(ð
õ]
È>'õQ4fÁulêw†™ ’Ù?wÄì>E(I
@…!‰FYñ*@¾a°;¶Ìn{hÓåKs|/zLÌ0)ì¤Ùž¸åÂ[ÛÞ@¦~imí Žß³}æúçÿ.v߸ÕËŠ“p–N˜²R È'–úfxA±kü®b%{V«·Q­ä/w¼AÿqW¹Æ¼ìj6Kùî’N·*ª¢òçüåɼ†Fƒ?Û×ëJz?S÷¦Í“†rZh›¾,t@ÓÄÛ‚vÒRÄ‹„šfrù0¼Clv¾ã"¸B‰Ø ù—Kq,Ò‘É™œ;5•Fæ×ã7ôpˆ„Q³Ýäê¤Z;Ïç®ò’ç1endstream
endobj
194 0 obj
693
endobj
WÐ÷vò8öJyo(n„ù/î_÷¿­Db&(E
Fµê$ä'£½·‹Z”ôQ˜?®TâÐn“ªnȦq4ª…t"Ÿ<K*ž„ªñho^°Å¼¤Žšþ!eä @÷/øj’ß>EÌ÷C:#9æRòèËçt¯ä¸µ¦–Pü4e6ôƒEM9ý³•ÝÍŽÆÔ÷±¿±ÈÒ•ºB¨ÂÂUWJ‘œÀÊËT=.hj»Uf´b¼Ñ{¬Xé)Á]ýœ›ë¡ó!7øJ,£.9P̶:-íS¹Ã–r*…ʶjm«ƒ5»À­Ð±»Ÿ¬a¡øÜ»KP×_Y5…U,›*Ášª©eBìÔûà3±ÿŒôÝ)M»‚¹cüøtÂ♪—ÇáÄnDg¨íŽE¬%2QveçŽnàœÚm²áΉƒ‘V!Q¨{ØTyvTú÷a`Ù;©M*u½ŽG“çËð L#†žÎ@ó¨‰WAáªÄôàÐÔKmÓóM CpŒÃ&B5ê)Ýöõà
ÕH'®G¡CÕlñæ v«²¯˜i™–;-5i¶ZXÜtâ@73 .tYHóx.+?ߊW endstream
endobj
197 0 obj
778
endobj
198 0 obj<</Type/Page/Parent 137 0 R/Contents 199 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F5 5 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 50 0 R>>endobj
199 0 obj<</Length 200 0 R/Filter/FlateDecode>>stream
xÚ­XÛnÛ8}ÏWÌX ÅVŠHݬ½nêt$m6ñîS_h‰¶YÈ’KQI½_¿CRòE–?4K:œ™sæB*ß.xøK ¦àG®.ÞO/®n<H`:?t D£¦Ùåï?Mî&÷“OS¸þçáéæóã=8øûåò¯ÉøÃ—·øåaüqòåí/ŽY™Ö+^(e©€çÜ\8Οo§_/<pˆçެÕñtzwû´³Úü,Ȩø
ÐeΊÅ;Ȅċ##Æïdzá¹òÝ~<~ß׃‰KArxê¡ï&gb÷Ì®æ7'@b-²¹‘Ž3p£<”•zJ¥X+¸9×Á_Ý@ˆ]àÐØ.è‚简aL)w2¾æE¦µgåŒïcײ\H¶²k\˜.žj5k¶à ª#éHÃ1¦oG†#ñbTÃ^5=¼Œm2^¡ÝÏ@ ÐÕI£Ä Üpg5¤Û«ü@è-~øDK9ˆßC¬€!ff¿@ü(t½aübªã÷ˆ‚ƒøßI$­î´G‰½kS÷Èç\ò"åpÏŠšåï0ÉBf0É„eašä°pÑø¥«ï;ƇC#üDº8îoï' 6kóRBå‰
l­zM­^²õ:)Óþ®ž‹ÌMëuå¬q]eÖV¶õ½ßŽOmº(ŒÏGV).Ïh i-Ñ ÄJeqjɤe¡Ö);h
²&pȤš“›vÐø˜CtÌŠlØÜõ8K—ÖbÓí¼4}Xñ½¨ë
xÚíWmo0þž_qk)
F• $+*Ìgc®ã8cŠÁ\–+cm/lÑŽ <Þ>TÚÚQø­îxæR[MôÆ.dÇk)P¬YnªbÅ”Û<o+g¼Ÿ˜ñ…(*xj‰êÎËZÂl£8T›"]ʲÿ™J—Rf¿‚÷=¤ ý8ÀÝåÍ#{Rop£ÑúÍÄÂÁÀÃ$Ét)OU-yÕ“ï{ŒãÍPmD=±ÇÖH.”Êy¯;_¤Ð‘—ó}! ‘ç:3æA1?ssÇ?ÞáòɱÀY¦ ¡ÂoÕº,*Ñè†éОE±@U$GíuÒµA0&¬Sm¦zÁ†Ò8-HçÏÜŽg¾é‚[“û;1“X­[ua
¸‚5—:oFÕÞs‰}›ç›nFoÊ</_t šS_æLÝ2¨¸#Ê׸ÕÒN¶Å_)&Õ¶ö:¬[ÝÛ~ƒ¥ÕД5FlbÑ»ÊjÅ1Šç”æ¨pµÆ¦²µfÈ„ÍÜGÈmd¹½×ªêÇa‚7<}ë·“ª˜dÔÜÿ—å5¯N+p¯H8Ò)n;§Ï
ÅÆb‰ç£ã!0I"×oÐ4 ¸×ìÐæ\ÑÎÃÐÃ-<'òu°&Cà^ v³Ê°ŽÍƒOuî r+ÒŽŸ®oo1UØè‹aº4ÑÃú<º{.]‹î¡kIƉM_8„Æ}4˼”?Œf¬ËòLš{6Mƒ>I3òl;:rHBzxNq{þa4Ã@ŸqÏ£i°gÓ4è“4bH&Ô¡axHòs­Öµú¡,ýQg²4سYôI–”Øã
#ä™ò ÏmNÈ"í’õôFLÛÓÏH7;ÕojúŒ„}zx0ÂùÖ<Á÷5ëwìW%áÙƒËbÏVÅ O©BðàkJk7¿WSé;IÚ}Ƀ?à“Þ;Y¾{æyg'!ï=6o7õ’ö#¿–³ÐïV\u€A?PoIÃÙ ßf#Öº
@@ -584,7 +595,7 @@ endobj
203 0 obj
1496
endobj
ã0ZP4 ‡è/t+yÝ¡–×ÛŠ-_³µ‚…(À\Z‹þîwÐÛÕE¸ao‡?_þF4SÛIb¸ƒÞBDà~’¡å6'|Àš}¹À8OÑ€&”,ÂßÐ@ˆ¡!&&2&É¢¡|÷í kEÕw\ÔG.Ì”ü§¨»¢BE½FLv¼„äaâ5еAÃdÀër·8CMàâúæ8‡?N
204 0 obj<</Type/Page/Parent 137 0 R/Contents 205 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 4 0 R/F8 7 0 R/F9 8 0 R>>>>/Annots 55 0 R>>endobj
205 0 obj<</Length 206 0 R/Filter/FlateDecode>>stream
xÚÅWKoâH¾ó+Jsb¤Ø¸íök¤=,d˜E Z˜C¤\ŒiÀ;~­m&“¿Un°‰çEÂqõWÝý}õèöþ1°u0,ð£Áx=M90똚jƒå˜°Þ
‡+†c^ÿ;à\ÕÑ þ1ÍÇA‘/D6IÂ$£Q¦*—Ãìô;àwàÀQ4úu=ÐT
@@ -749,131 +760,131 @@ xref
0000002992 00000 n
0000003077 00000 n
0000003178 00000 n
0000002992 00000 n
0000003077 00000 n
0000003178 00000 n
0000003263 00000 n
0000003350 00000 n
0000003435 00000 n
0000003522 00000 n
0000003607 00000 n
0000003673 00000 n
0000003758 00000 n
0000003824 00000 n
0000003909 00000 n
0000003975 00000 n
0000004060 00000 n
0000004126 00000 n
0000004211 00000 n
0000004277 00000 n
0000004362 00000 n
0000004428 00000 n
0000004513 00000 n
0000004607 00000 n
0000004708 00000 n
0000004793 00000 n
0000004894 00000 n
0000004979 00000 n
0000005080 00000 n
0000005164 00000 n
0000005202 00000 n
0000005289 00000 n
0000005374 00000 n
0000005461 00000 n
0000005546 00000 n
0000005577 00000 n
0000005643 00000 n
0000005728 00000 n
0000005784 00000 n
0000005866 00000 n
0000005897 00000 n
0000006001 00000 n
0000006106 00000 n
0000006211 00000 n
0000006316 00000 n
0000006420 00000 n
0000006525 00000 n
0000006630 00000 n
0000006734 00000 n
0000006839 00000 n
0000006944 00000 n
0000007049 00000 n
0000007154 00000 n
0000007259 00000 n
0000007364 00000 n
0000007469 00000 n
0000007574 00000 n
0000007679 00000 n
0000007784 00000 n
0000007889 00000 n
0000007994 00000 n
0000008099 00000 n
0000008204 00000 n
0000008309 00000 n
0000008413 00000 n
0000008518 00000 n
0000008623 00000 n
0000008728 00000 n
0000008833 00000 n
0000008938 00000 n
0000009043 00000 n
0000003263 00000 n
0000003350 00000 n
0000003435 00000 n
0000003522 00000 n
0000003607 00000 n
0000003673 00000 n
0000003758 00000 n
0000003824 00000 n
0000003909 00000 n
0000003975 00000 n
0000004060 00000 n
0000004126 00000 n
0000004211 00000 n
0000004277 00000 n
0000004362 00000 n
0000004428 00000 n
0000004513 00000 n
0000004607 00000 n
0000004708 00000 n
0000004793 00000 n
0000004894 00000 n
0000004979 00000 n
0000005080 00000 n
0000005164 00000 n
0000005202 00000 n
0000005289 00000 n
0000005374 00000 n
0000005461 00000 n
0000005546 00000 n
0000005577 00000 n
0000005643 00000 n
0000005728 00000 n
0000005784 00000 n
0000005866 00000 n
0000005897 00000 n
0000006001 00000 n
0000006106 00000 n
0000006211 00000 n
0000006316 00000 n
0000006420 00000 n
0000006525 00000 n
0000006630 00000 n
0000006734 00000 n
0000006839 00000 n
0000006944 00000 n
0000007049 00000 n
0000007154 00000 n
0000007259 00000 n
0000007364 00000 n
0000007469 00000 n
0000007574 00000 n
0000007679 00000 n
0000007784 00000 n
0000007889 00000 n
0000007994 00000 n
0000008099 00000 n
0000008204 00000 n
0000008309 00000 n
0000008413 00000 n
0000008518 00000 n
0000008623 00000 n
0000008728 00000 n
0000008833 00000 n
0000008938 00000 n
0000009043 00000 n
0000009148 00000 n
0000009253 00000 n
0000009358 00000 n
0000009253 00000 n
0000009358 00000 n
0000009463 00000 n
0000009567 00000 n
0000009671 00000 n
0000009463 00000 n
0000009567 00000 n
0000009671 00000 n
0000009776 00000 n
0000009881 00000 n
0000010164 00000 n
0000009881 00000 n
0000010164 00000 n
0000010196 00000 n
0000010228 00000 n
0000010758 00000 n
0000010806 00000 n
0000010854 00000 n
0000010903 00000 n
0000010952 00000 n
0000011001 00000 n
0000011050 00000 n
0000011099 00000 n
0000011148 00000 n
0000011197 00000 n
0000011246 00000 n
0000011295 00000 n
0000011344 00000 n
0000011393 00000 n
0000011442 00000 n
0000011491 00000 n
0000011540 00000 n
0000011589 00000 n
0000011638 00000 n
0000011687 00000 n
0000011736 00000 n
0000011785 00000 n
0000011834 00000 n
0000011883 00000 n
0000011932 00000 n
0000011981 00000 n
0000012030 00000 n
0000012079 00000 n
0000012128 00000 n
0000012177 00000 n
0000012226 00000 n
0000012275 00000 n
0000012324 00000 n
0000012373 00000 n
0000012422 00000 n
0000012471 00000 n
0000012520 00000 n
0000012569 00000 n
0000012618 00000 n
0000012667 00000 n
0000012976 00000 n
0000013128 00000 n
0000019489 00000 n
0000019511 00000 n
0000010196 00000 n
0000010228 00000 n
0000010758 00000 n
0000010806 00000 n
0000010854 00000 n
0000010903 00000 n
0000010952 00000 n
0000011001 00000 n
0000011050 00000 n
0000011099 00000 n
0000011148 00000 n
0000011197 00000 n
0000011246 00000 n
0000011295 00000 n
0000011344 00000 n
0000011393 00000 n
0000011442 00000 n
0000011491 00000 n
0000011540 00000 n
0000011589 00000 n
0000011638 00000 n
0000011687 00000 n
0000011736 00000 n
0000011785 00000 n
0000011834 00000 n
0000011883 00000 n
0000011932 00000 n
0000011981 00000 n
0000012030 00000 n
0000012079 00000 n
0000012128 00000 n
0000012177 00000 n
0000012226 00000 n
0000012275 00000 n
0000012324 00000 n
0000012373 00000 n
0000012422 00000 n
0000012471 00000 n
0000012520 00000 n
0000012569 00000 n
0000012618 00000 n
0000012667 00000 n
0000012976 00000 n
0000013128 00000 n
0000019489 00000 n
0000019511 00000 n
0000019606 00000 n
0000019708 00000 n
0000019728 00000 n
0000019883 00000 n
0000019708 00000 n
0000020917 00000 n
0000020938 00000 n
0000019883 00000 n
0000021051 00000 n
0000021237 00000 n
+1404 -1202
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+1026 -996
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+50 -24
Ver Arquivo
@@ -772,14 +772,14 @@ CUPS-Add-Printer request:
<P>The client OPTIONALLY supplies this attribute indicating a
textual reason for the current printer state.
<P>"requesting-user-name-allowed" (1setof name(127))
<P>"requesting-user-name-allowed" (1setof name(127) | delete)
<P><I>OR</I>
<P>"requesting-user-name-denied" (1setof name(127)):
<P>"requesting-user-name-denied" (1setof name(127) | delete):
<P>The client OPTIONALLY supplies one of these attributes to
specify an access control list for incoming print jobs. The
special name "ALLUSERS" is reserved to indicate that all users
are allowed or denied.
specify an access control list for incoming print jobs. To allow
all users access to a printer, use the delete tag for the
attribute value.
</UL>
@@ -988,7 +988,7 @@ CUPS-Add-Class request:
<P>"printer-is-accepting-jobs" (boolean):
<P>The client OPTIONALLY supplies this boolean attribute
indicating whether or not the printer object should accept new jobs.
indicating whether or not the class object should accept new jobs.
<P>"printer-info" (text(127)):
@@ -998,32 +998,32 @@ CUPS-Add-Class request:
<P>"printer-location" (text(127)):
<P>The client OPTIONALLY supplies this attribute indicating a
textual location of the printer.
textual location of the class.
<P>"printer-more-info" (uri):
<P>The client OPTIONALLY supplies this attribute indicating a
URI for additional printer information.
URI for additional class information.
<P>"printer-state" (type2 enum):
<P>The client OPTIONALLY supplies this attribute indicating the
initial/current state of the printer. Only the "idle" and "stopped"
initial/current state of the class. Only the "idle" and "stopped"
enumerations are recognized.
<P>"printer-state-message" (text(MAX)):
<P>The client OPTIONALLY supplies this attribute indicating a
textual reason for the current printer state.
textual reason for the current class state.
<P>"requesting-user-name-allowed" (1setof name(127))
<P><I>OR</I>
<P>"requesting-user-name-denied" (1setof name(127)):
<P>The client OPTIONALLY supplies one of these attributes to
specify an access control list for incoming print jobs. The
special name "ALLUSERS" is reserved to indicate that all users
are allowed or denied.
specify an access control list for incoming print jobs. To allow
all users access to a class, use the delete tag for the
attribute value.
</UL>
@@ -1508,9 +1508,12 @@ of the device-class attribute:
<LI>"serial" - The device-uri will be of the form
"serial:/dev/filename?baud=value+parity=value+flow=value".
The baud value is the data rate in bits per second; the
supported values depend on the underlying hardware.
The parity value can be one of "none", "even", or "odd".
The flow value can be one of "none", "soft" (XON/XOFF
handshaking), or "hard" (CTS/RTS handshaking).
handshaking), "hard" or "rts/cts" (RTS/CTS handshaking),
or "dtrdsr" (DTR/DSR handshaking).
<P>The URI returned by CUPS-Get-Devices will contain the
maximum baud rate supported by the device and the best
@@ -1612,6 +1615,18 @@ The default value is stored in the job-sheets-default attribute.
If two values are supplied, the first value is used as the starting banner
file and the second as the ending banner file.
<H3>job-originating-host-name (name(MAX))</H3>
<P><I>(CUPS 1.1.5 and higher)</I>
<P>The job-originating-host-name attribute specifies the host
from which the job was queued. The value will be the hostname or
IP address of the client depending on whether hostname
resolution is enabled. The localhost address (127.0.0.1) is
<B>always</B> resolved to the name "localhost".
<P>This attribute is read-only.
<H3>lpi (type2 enum)</H3>
<P>The lpi attribute specifies the number of lines per inch when
@@ -1745,13 +1760,30 @@ delineate directories.
<H2>Printer Attributes</H2>
<H3>job-sheets-default (1setof type3 keyword | name(MAX))</H3>
<H3>job-k-limit (integer)</H3>
<P><I>(CUPS 1.1 and higher)</I>
<P>The job-sheets-default attribute specifies the default banner file(s) to
print before and after each job. The value "none" specifies that no banner
should be printed.
<P>The job-k-limit attribute specifies the maximum number of kilobytes that
may be printed by a user, including banner files. The default value of 0
specifies that there is no limit.
<H3>job-page-limit (integer)</H3>
<P><I>(CUPS 1.1 and higher)</I>
<P>The job-page-limit attribute specifies the maximum number of pages that
may be printed by a user, including banner files. The default value of 0
specifies that there is no limit.
<H3>job-quota-period (integer)</H3>
<P><I>(CUPS 1.1 and higher)</I>
<P>The job-quota-period attribute specifies the time period used for quota
calculations, in seconds. The default value of 0 specifies that the limits
apply to all jobs that have been printed by a user that are still known to
the system.
<H3>job-sheets-supported (1setof type3 keyword | name(MAX))</H3>
@@ -1857,9 +1889,6 @@ identically to the printer-type attribute and default to all 1's.
allowed to access a printer or class. Either this attribute or the
requesting-user-name-denied attribute will be defined, but not both.
<P>The special name "ALLUSERS" is reserved to indicate that all users
are allowed.
<H3>requesting-user-name-denied (1setof name(127))</H3>
<P><I>(CUPS 1.1 and higher)</I>
@@ -1868,9 +1897,6 @@ are allowed.
not allowed to access a printer or class. Either this attribute or the
requesting-user-name-allowed attribute will be defined, but not both.
<P>The special name "ALLUSERS" is reserved to indicate that all users
are denied.
<H2>Printer Class Attributes</H2>
<H3>member-names (1setof name(127))</H3>
+1 -1
Ver Arquivo
@@ -7,7 +7,7 @@
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description
<LI>CUPS-IPP-1.1: CUPS Implmentation of IPP
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual
<LI>CUPS-SDD-1.1: CUPS Software Design Description
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual
+444 -310
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+2686 -2591
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+113 -11
Ver Arquivo
@@ -1,7 +1,7 @@
<HTML>
<HEAD>
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.1.1">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2001, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SAM-1.1.6">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Software Administrators Manual</TITLE>
</HEAD>
@@ -11,7 +11,7 @@
<P>This software administrators manual provides printer administration
information for the Common UNIX Printing System<SUP>TM</SUP>
("CUPS<SUP>TM</SUP>"), version 1.1.1.
("CUPS<SUP>TM</SUP>"), version 1.1.6.
<EMBED SRC="system-overview.shtml">
@@ -219,6 +219,19 @@ prior to running configure:
<B>./configure ... ENTER</B>
</PRE></UL>
<P>To enable support for encryption, you'll also want to add the
"--enable-ssl" option:
<UL><PRE>
./configure --enable-ssl
</PRE></UL>
<P>SSL and TLS support require the OpenSSL library, available at:
<UL><PRE>
<A HREF="http://www.openssl.org">http://www.openssl.org</A>
</PRE></UL>
<P>Once you have configured things, just type:
<UL><PRE>
@@ -824,6 +837,7 @@ determine how the server operates:
<LI><A HREF="#AuthClass"><CODE>AuthClass</CODE></A>
<LI><A HREF="#AuthGroupName"><CODE>AuthGroupName</CODE></A>
<LI><A HREF="#AuthType"><CODE>AuthType</CODE></A>
<LI><A HREF="#AutoPurgeJobs"><CODE>AutoPurgeJobs</CODE></A>
<LI><A HREF="#BrowseAddress"><CODE>BrowseAddress</CODE></A>
<LI><A HREF="#BrowseAllow"><CODE>BrowseAllow</CODE></A>
<LI><A HREF="#BrowseDeny"><CODE>BrowseDeny</CODE></A>
@@ -848,6 +862,7 @@ determine how the server operates:
<LI><A HREF="#Deny"><CODE>Deny</CODE></A>
<LI><A HREF="#DocumentRoot"><CODE>DocumentRoot</CODE></A>
<LI><A HREF="#ErrorLog"><CODE>ErrorLog</CODE></A>
<LI><A HREF="#FilterLimit"><CODE>FilterLimit</CODE></A>
<LI><A HREF="#Group"><CODE>Group</CODE></A>
<LI><A HREF="#HostNameLookups"><CODE>HostNameLookups</CODE></A>
<LI><A HREF="#ImplicitClasses"><CODE>ImplicitClasses</CODE></A>
@@ -857,6 +872,7 @@ determine how the server operates:
<LI><A HREF="#Location"><CODE>Location</CODE></A>
<LI><A HREF="#LogLevel"><CODE>LogLevel</CODE></A>
<LI><A HREF="#MaxClients"><CODE>MaxClients</CODE></A>
<LI><A HREF="#MaxJobs"><CODE>MaxJobs</CODE></A>
<LI><A HREF="#MaxLogSize"><CODE>MaxLogSize</CODE></A>
<LI><A HREF="#MaxRequestSize"><CODE>MaxRequestSize</CODE></A>
@@ -872,6 +888,7 @@ determine how the server operates:
<LI><A HREF="#PreserveJobFiles"><CODE>PreserveJobFiles</CODE></A>
<LI><A HREF="#PreserveJobHistory"><CODE>PreserveJobHistory</CODE></A>
<LI><A HREF="#Printcap"><CODE>Printcap</CODE></A>
<LI><A HREF="#RemoteRoot"><CODE>RemoteRoot</CODE></A>
<LI><A HREF="#RequestRoot"><CODE>RequestRoot</CODE></A>
<LI><A HREF="#RIPCache"><CODE>RIPCache</CODE></A>
<LI><A HREF="#ServerAdmin"><CODE>ServerAdmin</CODE></A>
@@ -1075,6 +1092,23 @@ authenticate using <A HREF="#CERTIFICATES">certificates</A>.
<P>The <CODE>AuthType</CODE> directive must appear inside a
<A HREF="#Location"><CODE>Location</CODE></A> directive.
<!-- NEED 3in -->
<H3><A NAME="AutoPurgeJobs">AutoPurgeJobs</A></H3>
<HR>
<H4>Examples</H4>
<UL><PRE>
AutoPurgeJobs Yes
AutoPurgeJobs No
</PRE></UL>
<H4>Description</H4>
<P>The <CODE>AutoPurgeJobs</CODE> directive specifies whether or not to purge
completed jobs once they are no longer required for quotas. This option has
no effect if quotas are not enabled. The default setting is <CODE>No</CODE>.
<!-- NEED 5in -->
<H3><A NAME="BrowseAddress">BrowseAddress</A></H3>
<HR>
@@ -1536,6 +1570,33 @@ default error log file is <VAR>/var/log/cups/error_log</VAR>.
<P>The special name "syslog" can be used to send the error information
to the system log instead of a plain file.
<!-- NEED 3in -->
<H3><A NAME="FilterLimit">FilterLimit</A></H3>
<HR>
<H4>Examples</H4>
<UL><PRE>
FilterLimit 0
FilterLimit 200
FilterLimit 1000
</PRE></UL>
<H4>Description</H4>
<P>The <CODE>FilterLimit</CODE> directive sets the maximum cost
of all running job filters. It can be used to limit the number
of filter programs that are run on a server to minimize disk,
memory, and CPU resource problems. A limit of 0 disables filter
limiting.
<P>An average print to a non-PostScript printer needs a filter
limit of about 200. A PostScript printer needs about half that
(100). Setting the limit below these thresholds will effectively
limit the scheduler to printing a single job at any time.
<P>The default limit is 0.
<!-- NEED 3in -->
<H3><A NAME="Group">Group</A></H3>
<HR>
@@ -1745,6 +1806,29 @@ simultaneous clients that will be allowed by the server. The default is
</TR>
</TABLE></CENTER>
<!-- NEED 3in -->
<H3><A NAME="MaxJobs">MaxJobs</A></H3>
<HR>
<H4>Examples</H4>
<UL><PRE>
MaxJobs 100
MaxJobs 9999
MaxJobs 0
</PRE></UL>
<H4>Description</H4>
<P>The <CODE>MaxJobs</CODE> directive controls the maximum number of jobs
that are kept in memory. Once the number of jobs reaches the limit, the
oldest completed job is automatically purged from the system to make room
for the new one. If all of the known jobs are still pending or active then
the new job will be rejected.
<P>Setting the maximum size to 0 disables this functionality. The default
setting is 0.
<!-- NEED 3in -->
<H3><A NAME="MaxLogSize">MaxLogSize</A></H3>
<HR>
@@ -1925,15 +2009,34 @@ Printcap /etc/printcap
<H4>Description</H4>
<P>The <CODE>Printcap</CODE> directive controls whether or not a
printcap file is automatically generated and updated with a list of
available printers. If specified with no value (the default), then no
printcap file will be generated.
printcap file is automatically generated and updated with a list
of available printers. If specified with no value, then no
printcap file will be generated. The default is to generate a
file named <VAR>/etc/printcap</VAR>.
<P>When a filename is specified (e.g. <VAR>/etc/printcap</VAR>), the
printcap file is written whenever a printer is added or removed. The
printcap file can then be used by applications that are hardcoded to
look at the printcap file for the available printers.
<!-- NEED 3in -->
<H3><A NAME="RemoteRoot">RemoteRoot</A></H3>
<HR>
<H4>Examples</H4>
<UL><PRE>
RemoteRoot remroot
RemoteRoot root
</PRE></UL>
<H4>Description</H4>
<P>The <CODE>RemoteRoot</CODE> directive sets the username for
unauthenticated root requests from remote hosts. The default
username is <VAR>remroot</VAR>. Setting <CODE>RemoteRoot</CODE>
to <VAR>root</VAR> effectively disables this security mechanism.
<!-- NEED 3in -->
<H3><A NAME="RequestRoot">RequestRoot</A></H3>
<HR>
@@ -2400,11 +2503,10 @@ Password again: <B>(password) ENTER</B> [password is not echoed]
<!-- NEW PAGE -->
<H2><A NAME="PRINTER_ACCOUNTING">Printer Accounting</A></H2>
<P>CUPS maintains a log of all accesses, errors, and pages that are
<P>The log files are normally stored in the <VAR>/var/log/cups</VAR>
directory. You can change this by editing the
<VAR>/etc/cups/cupsd.conf</VAR> configuration file.
<P>ESP Print Pro maintains a log of all accesses, errors, and
pages that are printed. The log files are normally stored in the
<VAR>/var/log/cups</VAR> directory. You can change this by
editing the <VAR>/etc/cups/cupsd.conf</VAR> configuration file.
<H3>The access_log File</H3>
+613 -494
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+350 -346
Ver Arquivo
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
1 0 obj<</Producer(htmldoc 1.8.8 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20000731155344Z)/Title( CUPS Software Design Description)/Author(Easy Software Products)>>endobj
1 0 obj<</Producer(htmldoc 1.9b1 Copyright 1997-2000 Easy Software Products, All Rights Reserved.)/CreationDate(D:20001118181220Z)/Title( CUPS Software Design Description)/Author(Easy Software Products)>>endobj
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Oblique/Encoding 2 0 R>>endobj
@@ -51,52 +51,53 @@
35 0 R
37 0 R
]endobj
39 0 obj<</Subtype/Link/Rect[72.0 670.8 107.8 683.8]/Border[0 0 0]/Dest[212 0 R/XYZ null 798 0]>>endobj
40 0 obj<</Subtype/Link/Rect[108.0 657.6 183.8 670.6]/Border[0 0 0]/Dest[212 0 R/XYZ null 745 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 644.4 203.0 657.4]/Border[0 0 0]/Dest[212 0 R/XYZ null 672 0]>>endobj
42 0 obj<</Subtype/Link/Rect[108.0 631.2 216.4 644.2]/Border[0 0 0]/Dest[212 0 R/XYZ null 467 0]>>endobj
43 0 obj<</Subtype/Link/Rect[72.0 604.8 131.6 617.8]/Border[0 0 0]/Dest[218 0 R/XYZ null 798 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 591.6 222.6 604.6]/Border[0 0 0]/Dest[218 0 R/XYZ null 745 0]>>endobj
45 0 obj<</Subtype/Link/Rect[108.0 578.4 202.4 591.4]/Border[0 0 0]/Dest[218 0 R/XYZ null 540 0]>>endobj
46 0 obj<</Subtype/Link/Rect[72.0 552.0 160.0 565.0]/Border[0 0 0]/Dest[224 0 R/XYZ null 798 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 538.8 167.3 551.8]/Border[0 0 0]/Dest[224 0 R/XYZ null 587 0]>>endobj
48 0 obj<</Subtype/Link/Rect[144.0 525.6 182.8 538.6]/Border[0 0 0]/Dest[224 0 R/XYZ null 327 0]>>endobj
49 0 obj<</Subtype/Link/Rect[144.0 512.4 182.8 525.4]/Border[0 0 0]/Dest[224 0 R/XYZ null 257 0]>>endobj
50 0 obj<</Subtype/Link/Rect[144.0 499.2 201.7 512.2]/Border[0 0 0]/Dest[224 0 R/XYZ null 164 0]>>endobj
51 0 obj<</Subtype/Link/Rect[144.0 486.0 192.6 499.0]/Border[0 0 0]/Dest[227 0 R/XYZ null 744 0]>>endobj
52 0 obj<</Subtype/Link/Rect[144.0 472.8 196.9 485.8]/Border[0 0 0]/Dest[227 0 R/XYZ null 544 0]>>endobj
53 0 obj<</Subtype/Link/Rect[144.0 459.6 184.0 472.6]/Border[0 0 0]/Dest[227 0 R/XYZ null 424 0]>>endobj
54 0 obj<</Subtype/Link/Rect[108.0 446.4 217.1 459.4]/Border[0 0 0]/Dest[227 0 R/XYZ null 346 0]>>endobj
55 0 obj<</Subtype/Link/Rect[144.0 433.2 182.2 446.2]/Border[0 0 0]/Dest[227 0 R/XYZ null 257 0]>>endobj
56 0 obj<</Subtype/Link/Rect[144.0 420.0 182.8 433.0]/Border[0 0 0]/Dest[227 0 R/XYZ null 148 0]>>endobj
57 0 obj<</Subtype/Link/Rect[144.0 406.8 181.0 419.8]/Border[0 0 0]/Dest[230 0 R/XYZ null 768 0]>>endobj
58 0 obj<</Subtype/Link/Rect[144.0 393.6 189.5 406.6]/Border[0 0 0]/Dest[230 0 R/XYZ null 698 0]>>endobj
59 0 obj<</Subtype/Link/Rect[108.0 380.4 143.4 393.4]/Border[0 0 0]/Dest[230 0 R/XYZ null 656 0]>>endobj
60 0 obj<</Subtype/Link/Rect[144.0 367.2 212.4 380.2]/Border[0 0 0]/Dest[230 0 R/XYZ null 555 0]>>endobj
61 0 obj<</Subtype/Link/Rect[144.0 354.0 215.5 367.0]/Border[0 0 0]/Dest[230 0 R/XYZ null 485 0]>>endobj
62 0 obj<</Subtype/Link/Rect[144.0 340.8 203.3 353.8]/Border[0 0 0]/Dest[230 0 R/XYZ null 416 0]>>endobj
63 0 obj<</Subtype/Link/Rect[144.0 327.6 218.5 340.6]/Border[0 0 0]/Dest[230 0 R/XYZ null 359 0]>>endobj
64 0 obj<</Subtype/Link/Rect[108.0 314.4 310.6 327.4]/Border[0 0 0]/Dest[230 0 R/XYZ null 305 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 301.2 272.3 314.2]/Border[0 0 0]/Dest[230 0 R/XYZ null 217 0]>>endobj
66 0 obj<</Subtype/Link/Rect[144.0 288.0 242.4 301.0]/Border[0 0 0]/Dest[233 0 R/XYZ null 768 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 274.8 230.8 287.8]/Border[0 0 0]/Dest[233 0 R/XYZ null 698 0]>>endobj
68 0 obj<</Subtype/Link/Rect[144.0 261.6 258.3 274.6]/Border[0 0 0]/Dest[233 0 R/XYZ null 628 0]>>endobj
69 0 obj<</Subtype/Link/Rect[144.0 248.4 235.1 261.4]/Border[0 0 0]/Dest[233 0 R/XYZ null 559 0]>>endobj
70 0 obj<</Subtype/Link/Rect[108.0 235.2 227.2 248.2]/Border[0 0 0]/Dest[233 0 R/XYZ null 504 0]>>endobj
71 0 obj<</Subtype/Link/Rect[144.0 222.0 317.9 235.0]/Border[0 0 0]/Dest[233 0 R/XYZ null 416 0]>>endobj
72 0 obj<</Subtype/Link/Rect[144.0 208.8 300.1 221.8]/Border[0 0 0]/Dest[233 0 R/XYZ null 346 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 195.6 302.6 208.6]/Border[0 0 0]/Dest[233 0 R/XYZ null 263 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 182.4 247.9 195.4]/Border[0 0 0]/Dest[233 0 R/XYZ null 207 0]>>endobj
75 0 obj<</Subtype/Link/Rect[144.0 169.2 262.2 182.2]/Border[0 0 0]/Dest[236 0 R/XYZ null 768 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 156.0 243.0 169.0]/Border[0 0 0]/Dest[236 0 R/XYZ null 711 0]>>endobj
77 0 obj<</Subtype/Link/Rect[108.0 142.8 166.0 155.8]/Border[0 0 0]/Dest[236 0 R/XYZ null 656 0]>>endobj
78 0 obj<</Subtype/Link/Rect[144.0 129.6 261.6 142.6]/Border[0 0 0]/Dest[236 0 R/XYZ null 568 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 116.4 240.6 129.4]/Border[0 0 0]/Dest[236 0 R/XYZ null 512 0]>>endobj
80 0 obj<</Subtype/Link/Rect[108.0 103.2 152.6 116.2]/Border[0 0 0]/Dest[236 0 R/XYZ null 444 0]>>endobj
81 0 obj<</Subtype/Link/Rect[144.0 90.0 206.6 103.0]/Border[0 0 0]/Dest[236 0 R/XYZ null 197 0]>>endobj
82 0 obj<</Subtype/Link/Rect[144.0 76.8 214.0 89.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 768 0]>>endobj
83 0 obj<</Subtype/Link/Rect[144.0 63.6 228.6 76.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 711 0]>>endobj
84 0 obj[39 0 R
39 0 obj<</Subtype/Link/Rect[72.0 684.0 107.8 697.0]/Border[0 0 0]/Dest[212 0 R/XYZ null 798 0]>>endobj
40 0 obj<</Subtype/Link/Rect[108.0 670.8 183.8 683.8]/Border[0 0 0]/Dest[212 0 R/XYZ null 745 0]>>endobj
41 0 obj<</Subtype/Link/Rect[108.0 657.6 203.0 670.6]/Border[0 0 0]/Dest[212 0 R/XYZ null 672 0]>>endobj
42 0 obj<</Subtype/Link/Rect[108.0 644.4 216.4 657.4]/Border[0 0 0]/Dest[212 0 R/XYZ null 467 0]>>endobj
43 0 obj<</Subtype/Link/Rect[72.0 618.0 131.6 631.0]/Border[0 0 0]/Dest[218 0 R/XYZ null 798 0]>>endobj
44 0 obj<</Subtype/Link/Rect[108.0 604.8 222.6 617.8]/Border[0 0 0]/Dest[218 0 R/XYZ null 745 0]>>endobj
45 0 obj<</Subtype/Link/Rect[108.0 591.6 202.4 604.6]/Border[0 0 0]/Dest[218 0 R/XYZ null 540 0]>>endobj
46 0 obj<</Subtype/Link/Rect[72.0 565.2 160.0 578.2]/Border[0 0 0]/Dest[224 0 R/XYZ null 798 0]>>endobj
47 0 obj<</Subtype/Link/Rect[108.0 552.0 167.3 565.0]/Border[0 0 0]/Dest[224 0 R/XYZ null 587 0]>>endobj
48 0 obj<</Subtype/Link/Rect[144.0 538.8 182.8 551.8]/Border[0 0 0]/Dest[224 0 R/XYZ null 327 0]>>endobj
49 0 obj<</Subtype/Link/Rect[144.0 525.6 182.8 538.6]/Border[0 0 0]/Dest[224 0 R/XYZ null 257 0]>>endobj
50 0 obj<</Subtype/Link/Rect[144.0 512.4 201.7 525.4]/Border[0 0 0]/Dest[224 0 R/XYZ null 164 0]>>endobj
51 0 obj<</Subtype/Link/Rect[144.0 499.2 192.6 512.2]/Border[0 0 0]/Dest[227 0 R/XYZ null 744 0]>>endobj
52 0 obj<</Subtype/Link/Rect[144.0 486.0 196.9 499.0]/Border[0 0 0]/Dest[227 0 R/XYZ null 478 0]>>endobj
53 0 obj<</Subtype/Link/Rect[144.0 472.8 184.0 485.8]/Border[0 0 0]/Dest[227 0 R/XYZ null 358 0]>>endobj
54 0 obj<</Subtype/Link/Rect[108.0 459.6 217.1 472.6]/Border[0 0 0]/Dest[227 0 R/XYZ null 280 0]>>endobj
55 0 obj<</Subtype/Link/Rect[144.0 446.4 182.2 459.4]/Border[0 0 0]/Dest[227 0 R/XYZ null 191 0]>>endobj
56 0 obj<</Subtype/Link/Rect[144.0 433.2 182.8 446.2]/Border[0 0 0]/Dest[230 0 R/XYZ null 768 0]>>endobj
57 0 obj<</Subtype/Link/Rect[144.0 420.0 181.0 433.0]/Border[0 0 0]/Dest[230 0 R/XYZ null 711 0]>>endobj
58 0 obj<</Subtype/Link/Rect[144.0 406.8 189.5 419.8]/Border[0 0 0]/Dest[230 0 R/XYZ null 641 0]>>endobj
59 0 obj<</Subtype/Link/Rect[108.0 393.6 143.4 406.6]/Border[0 0 0]/Dest[230 0 R/XYZ null 600 0]>>endobj
60 0 obj<</Subtype/Link/Rect[144.0 380.4 212.4 393.4]/Border[0 0 0]/Dest[230 0 R/XYZ null 499 0]>>endobj
61 0 obj<</Subtype/Link/Rect[144.0 367.2 215.5 380.2]/Border[0 0 0]/Dest[230 0 R/XYZ null 429 0]>>endobj
62 0 obj<</Subtype/Link/Rect[144.0 354.0 203.3 367.0]/Border[0 0 0]/Dest[230 0 R/XYZ null 359 0]>>endobj
63 0 obj<</Subtype/Link/Rect[144.0 340.8 218.5 353.8]/Border[0 0 0]/Dest[230 0 R/XYZ null 303 0]>>endobj
64 0 obj<</Subtype/Link/Rect[108.0 327.6 310.6 340.6]/Border[0 0 0]/Dest[230 0 R/XYZ null 248 0]>>endobj
65 0 obj<</Subtype/Link/Rect[144.0 314.4 272.3 327.4]/Border[0 0 0]/Dest[230 0 R/XYZ null 160 0]>>endobj
66 0 obj<</Subtype/Link/Rect[144.0 301.2 242.4 314.2]/Border[0 0 0]/Dest[233 0 R/XYZ null 768 0]>>endobj
67 0 obj<</Subtype/Link/Rect[144.0 288.0 230.8 301.0]/Border[0 0 0]/Dest[233 0 R/XYZ null 698 0]>>endobj
68 0 obj<</Subtype/Link/Rect[144.0 274.8 258.3 287.8]/Border[0 0 0]/Dest[233 0 R/XYZ null 628 0]>>endobj
69 0 obj<</Subtype/Link/Rect[144.0 261.6 235.1 274.6]/Border[0 0 0]/Dest[233 0 R/XYZ null 559 0]>>endobj
70 0 obj<</Subtype/Link/Rect[108.0 248.4 227.2 261.4]/Border[0 0 0]/Dest[233 0 R/XYZ null 504 0]>>endobj
71 0 obj<</Subtype/Link/Rect[144.0 235.2 317.9 248.2]/Border[0 0 0]/Dest[233 0 R/XYZ null 416 0]>>endobj
72 0 obj<</Subtype/Link/Rect[144.0 222.0 300.1 235.0]/Border[0 0 0]/Dest[233 0 R/XYZ null 346 0]>>endobj
73 0 obj<</Subtype/Link/Rect[144.0 208.8 302.6 221.8]/Border[0 0 0]/Dest[233 0 R/XYZ null 263 0]>>endobj
74 0 obj<</Subtype/Link/Rect[144.0 195.6 247.9 208.6]/Border[0 0 0]/Dest[233 0 R/XYZ null 207 0]>>endobj
75 0 obj<</Subtype/Link/Rect[144.0 182.4 262.2 195.4]/Border[0 0 0]/Dest[236 0 R/XYZ null 768 0]>>endobj
76 0 obj<</Subtype/Link/Rect[144.0 169.2 243.0 182.2]/Border[0 0 0]/Dest[236 0 R/XYZ null 711 0]>>endobj
77 0 obj<</Subtype/Link/Rect[108.0 156.0 166.0 169.0]/Border[0 0 0]/Dest[236 0 R/XYZ null 656 0]>>endobj
78 0 obj<</Subtype/Link/Rect[144.0 142.8 261.6 155.8]/Border[0 0 0]/Dest[236 0 R/XYZ null 568 0]>>endobj
79 0 obj<</Subtype/Link/Rect[144.0 129.6 240.6 142.6]/Border[0 0 0]/Dest[236 0 R/XYZ null 512 0]>>endobj
80 0 obj<</Subtype/Link/Rect[108.0 116.4 152.6 129.4]/Border[0 0 0]/Dest[236 0 R/XYZ null 444 0]>>endobj
81 0 obj<</Subtype/Link/Rect[144.0 103.2 206.6 116.2]/Border[0 0 0]/Dest[236 0 R/XYZ null 197 0]>>endobj
82 0 obj<</Subtype/Link/Rect[144.0 90.0 214.0 103.0]/Border[0 0 0]/Dest[239 0 R/XYZ null 768 0]>>endobj
83 0 obj<</Subtype/Link/Rect[144.0 76.8 228.6 89.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 711 0]>>endobj
84 0 obj<</Subtype/Link/Rect[144.0 63.6 201.8 76.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 655 0]>>endobj
85 0 obj[39 0 R
40 0 R
41 0 R
42 0 R
@@ -141,44 +142,43 @@
81 0 R
82 0 R
83 0 R
84 0 R
]endobj
85 0 obj<</Subtype/Link/Rect[108.0 670.8 165.8 683.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 655 0]>>endobj
86 0 obj<</Subtype/Link/Rect[108.0 657.6 160.9 670.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 598 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 644.4 175.5 657.4]/Border[0 0 0]/Dest[239 0 R/XYZ null 529 0]>>endobj
88 0 obj<</Subtype/Link/Rect[108.0 631.2 191.4 644.2]/Border[0 0 0]/Dest[239 0 R/XYZ null 472 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 618.0 176.7 631.0]/Border[0 0 0]/Dest[239 0 R/XYZ null 403 0]>>endobj
90 0 obj<</Subtype/Link/Rect[108.0 604.8 167.6 617.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 333 0]>>endobj
91 0 obj<</Subtype/Link/Rect[72.0 591.6 132.5 604.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 292 0]>>endobj
92 0 obj<</Subtype/Link/Rect[108.0 578.4 193.9 591.4]/Border[0 0 0]/Dest[239 0 R/XYZ null 190 0]>>endobj
93 0 obj<</Subtype/Link/Rect[108.0 565.2 165.8 578.2]/Border[0 0 0]/Dest[242 0 R/XYZ null 768 0]>>endobj
94 0 obj<</Subtype/Link/Rect[108.0 552.0 159.6 565.0]/Border[0 0 0]/Dest[242 0 R/XYZ null 698 0]>>endobj
95 0 obj<</Subtype/Link/Rect[108.0 538.8 194.5 551.8]/Border[0 0 0]/Dest[242 0 R/XYZ null 575 0]>>endobj
96 0 obj<</Subtype/Link/Rect[108.0 525.6 168.2 538.6]/Border[0 0 0]/Dest[242 0 R/XYZ null 493 0]>>endobj
97 0 obj<</Subtype/Link/Rect[108.0 512.4 214.9 525.4]/Border[0 0 0]/Dest[242 0 R/XYZ null 423 0]>>endobj
98 0 obj<</Subtype/Link/Rect[108.0 499.2 148.6 512.2]/Border[0 0 0]/Dest[242 0 R/XYZ null 314 0]>>endobj
99 0 obj<</Subtype/Link/Rect[108.0 486.0 152.3 499.0]/Border[0 0 0]/Dest[242 0 R/XYZ null 231 0]>>endobj
100 0 obj<</Subtype/Link/Rect[108.0 472.8 170.0 485.8]/Border[0 0 0]/Dest[242 0 R/XYZ null 161 0]>>endobj
101 0 obj<</Subtype/Link/Rect[108.0 459.6 161.5 472.6]/Border[0 0 0]/Dest[245 0 R/XYZ null 768 0]>>endobj
102 0 obj<</Subtype/Link/Rect[108.0 446.4 168.2 459.4]/Border[0 0 0]/Dest[245 0 R/XYZ null 685 0]>>endobj
103 0 obj<</Subtype/Link/Rect[108.0 433.2 162.7 446.2]/Border[0 0 0]/Dest[245 0 R/XYZ null 602 0]>>endobj
104 0 obj<</Subtype/Link/Rect[108.0 420.0 172.5 433.0]/Border[0 0 0]/Dest[245 0 R/XYZ null 532 0]>>endobj
105 0 obj<</Subtype/Link/Rect[72.0 406.8 184.5 419.8]/Border[0 0 0]/Dest[245 0 R/XYZ null 478 0]>>endobj
106 0 obj<</Subtype/Link/Rect[108.0 393.6 160.8 406.6]/Border[0 0 0]/Dest[245 0 R/XYZ null 389 0]>>endobj
107 0 obj<</Subtype/Link/Rect[108.0 380.4 160.8 393.4]/Border[0 0 0]/Dest[245 0 R/XYZ null 333 0]>>endobj
108 0 obj<</Subtype/Link/Rect[108.0 367.2 163.9 380.2]/Border[0 0 0]/Dest[245 0 R/XYZ null 277 0]>>endobj
109 0 obj<</Subtype/Link/Rect[108.0 354.0 161.5 367.0]/Border[0 0 0]/Dest[245 0 R/XYZ null 220 0]>>endobj
110 0 obj<</Subtype/Link/Rect[108.0 340.8 141.3 353.8]/Border[0 0 0]/Dest[245 0 R/XYZ null 164 0]>>endobj
111 0 obj<</Subtype/Link/Rect[108.0 327.6 168.8 340.6]/Border[0 0 0]/Dest[248 0 R/XYZ null 768 0]>>endobj
112 0 obj<</Subtype/Link/Rect[108.0 314.4 159.0 327.4]/Border[0 0 0]/Dest[248 0 R/XYZ null 685 0]>>endobj
113 0 obj<</Subtype/Link/Rect[108.0 301.2 165.8 314.2]/Border[0 0 0]/Dest[248 0 R/XYZ null 628 0]>>endobj
114 0 obj<</Subtype/Link/Rect[108.0 288.0 173.7 301.0]/Border[0 0 0]/Dest[248 0 R/XYZ null 572 0]>>endobj
115 0 obj<</Subtype/Link/Rect[108.0 274.8 162.1 287.8]/Border[0 0 0]/Dest[248 0 R/XYZ null 515 0]>>endobj
116 0 obj<</Subtype/Link/Rect[108.0 261.6 162.7 274.6]/Border[0 0 0]/Dest[248 0 R/XYZ null 459 0]>>endobj
117 0 obj<</Subtype/Link/Rect[36.0 235.2 88.2 248.2]/Border[0 0 0]/Dest[254 0 R/XYZ null 798 0]>>endobj
118 0 obj<</Subtype/Link/Rect[72.0 222.0 119.0 235.0]/Border[0 0 0]/Dest[254 0 R/XYZ null 745 0]>>endobj
119 0 obj<</Subtype/Link/Rect[72.0 208.8 136.8 221.8]/Border[0 0 0]/Dest[254 0 R/XYZ null 566 0]>>endobj
120 0 obj[85 0 R
86 0 R
86 0 obj<</Subtype/Link/Rect[108.0 684.0 160.9 697.0]/Border[0 0 0]/Dest[239 0 R/XYZ null 598 0]>>endobj
87 0 obj<</Subtype/Link/Rect[108.0 670.8 175.5 683.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 529 0]>>endobj
88 0 obj<</Subtype/Link/Rect[108.0 657.6 191.4 670.6]/Border[0 0 0]/Dest[239 0 R/XYZ null 472 0]>>endobj
89 0 obj<</Subtype/Link/Rect[108.0 644.4 176.7 657.4]/Border[0 0 0]/Dest[239 0 R/XYZ null 403 0]>>endobj
90 0 obj<</Subtype/Link/Rect[108.0 631.2 167.6 644.2]/Border[0 0 0]/Dest[239 0 R/XYZ null 333 0]>>endobj
91 0 obj<</Subtype/Link/Rect[72.0 618.0 132.5 631.0]/Border[0 0 0]/Dest[239 0 R/XYZ null 292 0]>>endobj
92 0 obj<</Subtype/Link/Rect[108.0 604.8 193.9 617.8]/Border[0 0 0]/Dest[239 0 R/XYZ null 190 0]>>endobj
93 0 obj<</Subtype/Link/Rect[108.0 591.6 165.8 604.6]/Border[0 0 0]/Dest[242 0 R/XYZ null 768 0]>>endobj
94 0 obj<</Subtype/Link/Rect[108.0 578.4 159.6 591.4]/Border[0 0 0]/Dest[242 0 R/XYZ null 698 0]>>endobj
95 0 obj<</Subtype/Link/Rect[108.0 565.2 194.5 578.2]/Border[0 0 0]/Dest[242 0 R/XYZ null 575 0]>>endobj
96 0 obj<</Subtype/Link/Rect[108.0 552.0 168.2 565.0]/Border[0 0 0]/Dest[242 0 R/XYZ null 493 0]>>endobj
97 0 obj<</Subtype/Link/Rect[108.0 538.8 214.9 551.8]/Border[0 0 0]/Dest[242 0 R/XYZ null 423 0]>>endobj
98 0 obj<</Subtype/Link/Rect[108.0 525.6 148.6 538.6]/Border[0 0 0]/Dest[242 0 R/XYZ null 314 0]>>endobj
99 0 obj<</Subtype/Link/Rect[108.0 512.4 152.3 525.4]/Border[0 0 0]/Dest[242 0 R/XYZ null 231 0]>>endobj
100 0 obj<</Subtype/Link/Rect[108.0 499.2 170.0 512.2]/Border[0 0 0]/Dest[242 0 R/XYZ null 161 0]>>endobj
101 0 obj<</Subtype/Link/Rect[108.0 486.0 161.5 499.0]/Border[0 0 0]/Dest[245 0 R/XYZ null 768 0]>>endobj
102 0 obj<</Subtype/Link/Rect[108.0 472.8 168.2 485.8]/Border[0 0 0]/Dest[245 0 R/XYZ null 685 0]>>endobj
103 0 obj<</Subtype/Link/Rect[108.0 459.6 162.7 472.6]/Border[0 0 0]/Dest[245 0 R/XYZ null 602 0]>>endobj
104 0 obj<</Subtype/Link/Rect[108.0 446.4 172.5 459.4]/Border[0 0 0]/Dest[245 0 R/XYZ null 532 0]>>endobj
105 0 obj<</Subtype/Link/Rect[72.0 433.2 184.5 446.2]/Border[0 0 0]/Dest[245 0 R/XYZ null 478 0]>>endobj
106 0 obj<</Subtype/Link/Rect[108.0 420.0 160.8 433.0]/Border[0 0 0]/Dest[245 0 R/XYZ null 389 0]>>endobj
107 0 obj<</Subtype/Link/Rect[108.0 406.8 160.8 419.8]/Border[0 0 0]/Dest[245 0 R/XYZ null 333 0]>>endobj
108 0 obj<</Subtype/Link/Rect[108.0 393.6 163.9 406.6]/Border[0 0 0]/Dest[245 0 R/XYZ null 277 0]>>endobj
109 0 obj<</Subtype/Link/Rect[108.0 380.4 161.5 393.4]/Border[0 0 0]/Dest[245 0 R/XYZ null 220 0]>>endobj
110 0 obj<</Subtype/Link/Rect[108.0 367.2 141.3 380.2]/Border[0 0 0]/Dest[245 0 R/XYZ null 164 0]>>endobj
111 0 obj<</Subtype/Link/Rect[108.0 354.0 168.8 367.0]/Border[0 0 0]/Dest[248 0 R/XYZ null 768 0]>>endobj
112 0 obj<</Subtype/Link/Rect[108.0 340.8 159.0 353.8]/Border[0 0 0]/Dest[248 0 R/XYZ null 685 0]>>endobj
113 0 obj<</Subtype/Link/Rect[108.0 327.6 165.8 340.6]/Border[0 0 0]/Dest[248 0 R/XYZ null 628 0]>>endobj
114 0 obj<</Subtype/Link/Rect[108.0 314.4 173.7 327.4]/Border[0 0 0]/Dest[248 0 R/XYZ null 572 0]>>endobj
115 0 obj<</Subtype/Link/Rect[108.0 301.2 162.1 314.2]/Border[0 0 0]/Dest[248 0 R/XYZ null 515 0]>>endobj
116 0 obj<</Subtype/Link/Rect[108.0 288.0 162.7 301.0]/Border[0 0 0]/Dest[248 0 R/XYZ null 459 0]>>endobj
117 0 obj<</Subtype/Link/Rect[36.0 261.6 88.2 274.6]/Border[0 0 0]/Dest[254 0 R/XYZ null 798 0]>>endobj
118 0 obj<</Subtype/Link/Rect[72.0 248.4 119.0 261.4]/Border[0 0 0]/Dest[254 0 R/XYZ null 745 0]>>endobj
119 0 obj<</Subtype/Link/Rect[72.0 235.2 136.8 248.2]/Border[0 0 0]/Dest[254 0 R/XYZ null 566 0]>>endobj
120 0 obj[86 0 R
87 0 R
88 0 R
89 0 R
@@ -229,20 +229,20 @@
134 0 obj<</D[224 0 R/XYZ null 257 null]>>endobj
135 0 obj<</D[224 0 R/XYZ null 164 null]>>endobj
136 0 obj<</D[227 0 R/XYZ null 744 null]>>endobj
137 0 obj<</D[227 0 R/XYZ null 544 null]>>endobj
138 0 obj<</D[227 0 R/XYZ null 424 null]>>endobj
139 0 obj<</D[227 0 R/XYZ null 346 null]>>endobj
140 0 obj<</D[227 0 R/XYZ null 257 null]>>endobj
141 0 obj<</D[227 0 R/XYZ null 148 null]>>endobj
142 0 obj<</D[230 0 R/XYZ null 768 null]>>endobj
143 0 obj<</D[230 0 R/XYZ null 698 null]>>endobj
144 0 obj<</D[230 0 R/XYZ null 656 null]>>endobj
145 0 obj<</D[230 0 R/XYZ null 555 null]>>endobj
146 0 obj<</D[230 0 R/XYZ null 485 null]>>endobj
147 0 obj<</D[230 0 R/XYZ null 416 null]>>endobj
148 0 obj<</D[230 0 R/XYZ null 359 null]>>endobj
149 0 obj<</D[230 0 R/XYZ null 305 null]>>endobj
150 0 obj<</D[230 0 R/XYZ null 217 null]>>endobj
137 0 obj<</D[227 0 R/XYZ null 478 null]>>endobj
138 0 obj<</D[227 0 R/XYZ null 358 null]>>endobj
139 0 obj<</D[227 0 R/XYZ null 280 null]>>endobj
140 0 obj<</D[227 0 R/XYZ null 191 null]>>endobj
141 0 obj<</D[230 0 R/XYZ null 768 null]>>endobj
142 0 obj<</D[230 0 R/XYZ null 711 null]>>endobj
143 0 obj<</D[230 0 R/XYZ null 641 null]>>endobj
144 0 obj<</D[230 0 R/XYZ null 600 null]>>endobj
145 0 obj<</D[230 0 R/XYZ null 499 null]>>endobj
146 0 obj<</D[230 0 R/XYZ null 429 null]>>endobj
147 0 obj<</D[230 0 R/XYZ null 359 null]>>endobj
148 0 obj<</D[230 0 R/XYZ null 303 null]>>endobj
149 0 obj<</D[230 0 R/XYZ null 248 null]>>endobj
150 0 obj<</D[230 0 R/XYZ null 160 null]>>endobj
151 0 obj<</D[233 0 R/XYZ null 768 null]>>endobj
152 0 obj<</D[233 0 R/XYZ null 698 null]>>endobj
153 0 obj<</D[233 0 R/XYZ null 628 null]>>endobj
@@ -363,14 +363,15 @@ endobj
endobj
212 0 obj<</Type/Page/Parent 205 0 R/Contents 213 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>/Annots 15 0 R>>endobj
213 0 obj<</Length 214 0 R/Filter/FlateDecode>>stream
xÚ¥UÛnÛ8}÷W ú”kÖ’¯Ù·¦Îf½hS5rŠ>ø…¦( %º$eÃýúÎr}iº(PذAÍ휙ÃÑ×N=ü$0N¡?Qunç×ÿÜ@Úƒy‰–Ñxóâ*¼ž Öd­Ýþ€¥ÁΘ²öªT‚{eêè:€$i]Ó1‘ë|­8Sú·
éÔª¦?aÕ†¡0¢©0l¬Ù*´ÀJÖÒr ª.­BzÀ¯_KàV¬•—Â7˜Œ×S¨z¦$3ÀÒI?¢|kª
ãžfŸ!³
Ñ¢g¾w^V°¸zõö)Ë_-®á“´ŽJ )ö3ã” "ãôúa+íVÉùÞÍ;=ÖÞÒOB?÷0%lÃAÊzPÁ`BpâIC;~lÔpÐX̱6Æz¾ÔŸµÀ5ßK Ø‘@h‘GÝ%w²”åÁÅ€ŽÁÌÚ;XJI½ÞJ>:tØ®àꎻý/éà†é)!™” ÛqyûÑ¡‚Iò#´eNÇ4–4‘YS4»sl½6ð†SçqêÜǾ8£› j ×:Î{+ëÂX4Ò8œ0ƒ³_H…´ÕŽ÷Sˆ¹•öYj¹GU>èjUKT¤—¶äB:Ö&HGQ!9rA¦3ò«¥?ÊIz#Œ&áͲŒtÇ£/oÇ:|EÎ|1ˈÿk#¬sô~‡0.°‡()—$w,ð.›RuŠÏßKçøJ­6â™Ìùû[4ÿr¿Ùlr|ŒPWœ=3Îà?é§ÊâÃ6¡ §¹(îš IÕµS~ Vâ(ñP6µ ¡p­ü¾m=/
Ø”±Ï‘"[Z³sÄ™ÀdÆù<,hI]T›žì $Ežñü„ vGºiÑ!,®»XWŸ¸5u!ã]zq–Äç-t/¤hœ7•ú†•¶íÂÀ¥sÿð÷k„q!(ÑX‹ÛLï[X¦üÙkȆ½Åõ7j¯AU4«RáÕœe¨îCïJvB©6u÷¤_m?Q%9¯6\XE8ƒ°þÍB{ï²üÃÃEÕC\¨ÑÒ-bU¬HuMÈý?Û±ÓÃøJ@?cW¼mG &ܘÒhmváîË 2÷w¬%ÚZ¸qÒã8éh ç`ð×=}ʼn#ÈCc^ŠÂ¤ð(K‰q…üvhC§‘éy~3þ Æßkƒ7Ùî£iÒšº-ÛqÂ.ß݃IÝ`fzÚ®÷ïF6lêendstream
xÚ¥UMsÛ6½ëWìädÏDI}º·8r\u‡1åLº@$(! ¥Q}wÊúHÚi“±Çr»ï½}X~ëÅáO cÈ«Þí¢÷æý $,JŒŒ'SXW1d¹nÄõâ«Æ“í†,ñqüµ“¥Ì¹“º©Cˆã.5™°1¥.6Ò‚Õ¥Ûq# V®kú—ÙÐA(tÞVX
£·µ0\¬Km*_ð×mp“o¤¹k±¯ Èu!ë5è’Â[ǃ€ò®*<÷ô0ÿR#-ff{ëDË«WïžÒìÕò¾’bß3NØ00NG?m…ÙJ±£Ü»E/bjJbúóxÃq̦0&,
†SždAñ£P£áÀcE0G84Ú8¾RßuÀß ¨ˆ'´LFãþŠ[QÊpŸb=@Ë`î`Ã-¬„ ­·BaN«=x…Λ5\Ýq»ÿG:ø£dŠ”LÂFÝ÷cBÓøåhÇœo˜÷XvðDjtÑæÎžc‹ØÀi¦Ò'ÖáÔ¹)ŽºX­Zo’†+æ½õi-N˜Á™ÄV!ouãýâÏÜ
ó,”Ø£Áª
_ô•¬:Ò Sò\XÖHÆÁ¾86²Þ¦sÊ«…;ÚI:kEÆ›§)ùއ\}øš’=7øªWÿ·V´Ø˜ýa\`÷=Ð3.ÈîØàC:£úßÖòµ€[¥óg
go1üÚ×~Û4¾F¨Ë+Ξgð‡p3iðŽa‰¦ƒ@èÂ)«/šÛ¶!«¢»vÒmÀ%>”mÓP¸’nßIÏ‹Âвӿ9PDp+£w–8˜T[—ùÅ©‹n³“½DÒÀ3\ƒCh·ä›Ââª}ÕIZ["ܥΒ¸â¼sÕ† ™·ÖéJþ…¶ÝÂÀ¥sÿð÷p!¨¼5·™Úw°tù}Öˆ¢åõ7€× +šU)ñê?ÎStw^û–ŠPªuÝ?Ñ«Ó]’ñªÁÃ…‘„Óë÷ÔË{—fŸÎùÝ"tÅŽdPëÑøÚÿ²0;ìñÓýø‹ŸÌÓfÍk/;ÕþÆ”Z)½ów_x—Ùߨ~Ð^FCÿô–w úÜ=%,“ñÎRìE— <ŠRà,ó°-~¦Ê«Ì¿sUþ©·Xê^i¼ÊfÿjLAܾ I³Ë/ûp±›p0î–ÿçÞß•hssendstream
endobj
214 0 obj
936
941
endobj
215 0 obj<</Type/Page/Parent 205 0 R/Contents 216 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
216 0 obj<</Length 217 0 R/Filter/FlateDecode>>stream
@@ -382,17 +383,16 @@ endobj
endobj
218 0 obj<</Type/Page/Parent 205 0 R/Contents 219 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>/Annots 38 0 R>>endobj
219 0 obj<</Length 220 0 R/Filter/FlateDecode>>stream
xÚµ˜KH Çï|
ÙªÄãGâ7 À°5Ylæ´ãt‚·b;k;ÅðíGêöCYB;¶¨
ÕÉÏjEú·¤Î¿'˜øggƒãB’\D'ß®°Mˆ–ø‰ëù-NmxKQŠ<ÕÑ?±<…Œ‰aKȰàòq¬H¶™Èë¸N‹\á°¬·=Ã%<z°,Öëâ%ÍWêÁÒ
Êv×<½BýŒoµÌ™2œ4†mÛ®1!ÛÛ®»;ŸÒãËûùØ2¬3µße‘/ÓÕ¶TûÝÇy¼dæë8ßµŽ[Žúžï¿Í˜ñðµªE·y-Êeœ˜‰*]åô/)ÓMm1çþßf›u¯b øñÇm†ç÷dÓøÕ:^,ë—¸p¾ÈÒ<­jŒOQVŸm¼>ÂþnXZë_ŽpþŽëó²X•q–‘´Žö;|Øçw(’m™Ö¯x$6EYa7šï³‰êXá…ï„ᱟIÜϽ‰û‰6Ioo2×Ö„±:ŒŽ­£õ³(»ÂPXò"ï
ÈOW…«èÄ4L¬|ôbÑËà Ö?ÃÇwБ \‹™Z¬!ÜC3 ÃÍ|Ã×â–år~2È3"Ãjlðœ@Þ¶ OÏ3ù©‡qÒòŒÈÀ±Í8¼k „Ó™ú†ÓóÞdÇþÅ›|•+èõƒËñ'J@ç‹â QÕ¡'V‚”*0W+\§k×E™Å5„‘¤Ë4‘5tÔ‰{b8I¥ß×ìömÕ5öÐË·ÇH£.ÏD%¶ê’ ººQ—oÔÕò.8-Ï̾eSì5<'wcªç¼G¹éù²éYêľɿ]œ¯¶Ø¥ûydÑsZ.àj‘RM«}ØDÏàÏâ â|ÑÉ'5üØ5*Tª¥hï›,£WyR,¨®‘ᨌóêà ¤³E­_Î*Tào¶éBgç¾Xˆµt(Yœ×irÀ—Ó(ܜȜO¥äb¿Dïuî§@çÁÀ9AÕÖ&ýéxF ïËÚ¨ãAç'0Æ osªôýp}‰ïzÁîÒ\ôµ*Ö bê")Ö_^‡ìÀB¶É’Zh²ÔÒ2 :šÀ9AY
0&ZžTå&u-Ïä=ª©Zž”Õé€ÿœ Jñ×òŒ@>0w‚?¬;°U†I5öÔõFí }SÄë
禲ºpä¢é|Tnþ?aÄÌNGr¡ÓQC+™hh`ÞpŒÔ㜠yÎp‚täàYÖòŒ YÌÅ(éxNŽüûœ î*U«ã¼KÓ­–gòþt žœ YzÏ S/`*õGð R¢x€°.·I½ÅY/­ôF߆ôb=íLèeþQ»4|¶¢– ¨ZiVC3€ŠãqNH}J¹Žgòݽ´<#H¤4 ëxNÐ# ÉêxFÐh‘ˆ:þ¹SÃg2Âyo6”ç'Q¿‘ÃÝ|&ƒ³L—ûêëkÜÔ’w•m¹ÐÉ¡¡U¶54¨Æ9T148'¨— òçmkˆç„J¯Þ}NPzJoÇÞ©­îk2½®åŽàû+Ž×µøU«ÑÇû.«0Ã÷(’#ë×'Øñû‘U-t nh•? ÍY=
ç þ€3œPʧå9¡šŒÞNdÍiÔòŒ áÆ¥jÔñ ú‘à eηXìéZ"{È\ÄUšÈc?KWô‹Ùy’ˆªz¯[ì>®:ƒß*·wûþ÷'î‰oâW0é#§Ð_'¿VÐTÂendstream
xÚµ˜MF†ïüŠ>nªl­4²õÁ 0°¤ ÖAbO¹yl”²$G’‹åß§{F–ÚY3rÀ)ªLõh>ºßy§ÇŸ9`㟾׃4?»ŒÏ¾Þ„ lˆ—øÄóˆ_<Ê¥¬d‘Êú·ø/…8¾FÆîÄ
²¸zšG0+Óm.‹&i²²Ðø§Å…oy„Ç/–åz]¾fÅJ¿¸à/BVCµuÏoмàW;æœ:Æ9…gM¨?êa|õ0;–s®û»*‹e¶ÚVº¿‡¤HV’Þ…ù:i'–¶ûV€³Ã~þžû³¦gcÇÕËTãÜÍflœè­ndwE#«e’J˜É:[ô/­²MŽ6竺Ë7kÙ‡©\>ÿTÿÑÅõoýÜ­§\6¯I%áb‘gEV7Á²ª)‚Ûdý¹¡ö·èÄ‹æï,h^•«*És’Ü)V=ZM$Óm•5o¸k6eÕ|nˆx~hˆXÖ'qôôNœžjy¢|ÿ8˜ïØ=‰÷¿%|g:càcWè/°ñ½yUç<õ‘®S”ÅxÏyj Ù ÙÎu|f[6:'}8ôñx‹þiÙà.Ž“ƒ êÆ¢4rœe€«5áŽãq~2È3"G7<'ÂòÍ<#Ÿú˜#ψ\ȧÈ{Î@8Ýi`¹=ïOöú¿ü%_ÕŠÎ;7˜hU\,Êg4‡²n"%Gô‰ŒÌœën²µ„›²Ê“¢L³e–* uržX®EéG³ÛÑŒÊ6èÉ·Qã;=©†IO-ÝêÉ€·zÚñm!#ÏÌ·#(ڞȻ¡55óŒ@Þ§¼ôüÁüõÛ›2é;Ú ~Éä}R¬¶xî÷Ìâ—¬ZÀõ"£ì}$aï8žÃçð{ù I±è$ɾo¤.Bêš)výUùèu‘– ò.#®’¢þÌÓuÛäû·Ûl!?ÝåC¹k5ÍHæIÑdéðê ;Áž(mL•PTã°”Càw¯¦@ûÆÀ9A>,H§&žÈÊ5M<#hŸ…VÈø#ö=Õûàñæ
¿õÃÜg…ìý,‘9ú–AM™–ë“z•T@›!Ý0dhG«˜h`…3€s2b<Œ<#È 'q#Ïä}ò]#ÏÊèt`þœ “•v•‘gò¡½üaňPè}KŠíŠñÛ2Y×X,U¸‡õݦíÉHþóÿh£ewR “†ZZKÄ@3s†u£ç˜ 'HC.îa#ϪÎ<Œ‰çi(èŸtú*ÅšxF ïÑÚÈ3ù`:ONPõGµAÏ¡Q?d
Fð¨Ód-•<±ô‡¨©¶i³ÅâïÃôEú˜…ú¥ëÂ,ñ
Ú£Rt'hÕ0 º¥µ^ 4ȇ:ç 4 t›xF ÒEËÈ3‚J庉ç]7B’«‰g•‡ ¨ã&!<’͆rü,›W) ¸ŸÏ”Z°|éò^ŸÖÛ¦ŽºèL«†I
-­3m @Þæ’SpNÐù5ÈûœÎÏ Zóô9A©u)µDj§BßáTj=ÇÁ·7,·ù³Ñõ1–ý]Fa<†oq¬*ÔÓ&× úòT7LÉmi;Í*O}
Žç•›ÁÀd8¡‹ßÈsB,æùp"ow¡‘g3¹PÇ!7ìË_3”m¸Ø¢ÁÓ Dçp™ÔYª¶û,[Ñ/ii*ëú½bÿõ#.FÁî¡þ¡ª›Ö¿6®P½í¶úúãìfck”endstream
endobj
220 0 obj
1330
1334
endobj
221 0 obj<</Type/Page/Parent 205 0 R/Contents 222 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 8 0 R>>>>>>endobj
222 0 obj<</Length 223 0 R/Filter/FlateDecode>>stream
@@ -404,31 +404,41 @@ endobj
endobj
224 0 obj<</Type/Page/Parent 205 0 R/Contents 225 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
225 0 obj<</Length 226 0 R/Filter/FlateDecode>>stream
xÚµVMsã6 ½ûW`rrf"ù³þHO›¤Ûqg§»Í:{ò…– ™ITH*žüû¤äÈj6­:íøB‘ €÷øøi01ý&°œÂlQ>¸ÙF×0Ã6¡“ÅrÛx8ƒ;42-àó3êg‰ÇËíw²›Ãdâí‚é*œ²åíׯ D*/•ÁTk0*±G¡Ì‹±˜°aA•¨…E°*E{@M  ­Déœ}䪀RËÂÊ"+Ì£¹ö¡£:´‹Lᜣ曆%œç6¼Ñ#±9¿G)Of>å7/¡~Ä _à–r}oßþºégϤ}(ËLFÂJ‚üE«T<Gm`SXâCDØßå&)÷IîµÐ/½Ü $òûáþ(3ʵ߯Ñã*CÝï–Ó|ë¼Ï&K>÷r fS/Y8s´•» l´= ìk#y™aŽ…u"¬Šúa (*PTùž$îX& j¶”ÍC™>dÙ«3~$²Œªá(í3hÁÎ Zv(tZqäþJ¿Ãg!<Üo  ê¢U!]!Ý£Q•¦£MLŽe")u:p6ª²ee!öwwC Ó°v<n—BsúÙõˆÌFeVv_Û/ÃÕ+<Y–×£ÑAGºN¥ãawž£ Μ¼…ö7µoãñˆ¿Ó¦ì‚¤vÄû»!¿PŠú/ÁþFl†\ýNÙ×A*þƨHRëòÚÃ@ÁXj[ißP[i³&Œåõˆ\ÎáÿðV•MñUÕ‘ßÖøTIMÿ5wŸK_7>€ª¿ÞÁbJª ªÖŸû+5:Ó7<u$tìì†Þ‘Èv—u2 ¹qÃóåg‰O£H«BY0%F¬¥øÊÝ©kòÊXbGÄn×yàÈg¢uþ­rgc,µ)¡cjToE@#÷TÐ7ínÁ)Ǥ37õø25I¡_Ö÷›+©Ô†¸ÔióâEvGUe1ì9EEr§ûì_œKöpÑ  OÍtÞôÈõ©‘R+%Û7ºhÓCéôD“qˆ‚†G÷Ì–“/Е~ôì±ì40‚l7úÈŒæaý£U‘ÊB P(L†dmµ‚ÕðºýÌG *-S•¥ÒÖÓRK’ÛW¶õ†Lßçi
Y¿ÃþW<}zŽèØn~pÏT‡¥­3UˉGÄuÃКótºœ{(”f[ZOVxŽÛËxÝàžA3.Þߘü32Eãó„?RE÷†g):WN~ùMë¡Ö‹Õk¶ó±·óÏï|5×dEç?ñ÷/ÛÁƒ?^¡[Äendstream
xÚµVMsÛ8 ½ûW`rrf"ùsý‘=5ÉvÇ;¶›:{ò…– ›$2$Oþý¤äÈÞ4Ó8Ýñ…&AïxÐCg}ú `:„Ñ’¢sµìô>Îa؇eF'“é –iw7h妄/h%îΗßÉn ƒA°‹†³xÈ–×w_¿´¨B+‹)¨ æ`Uæv ØjÙ'ë°°à¶ÂÒh„Cpjƒn‹†@[™2û(T ÚÈÒÉrNØ{{É¡)×h8‰ÇñJ$÷X¦6¤”Ô)EÓxFyÑùj8™Âa¾| F!ã+4÷˜ã\S8ñG×.N¾Ê¬}Ð:—‰p05jcDQ ±°("|—÷E!6Lâ'¹6Â<êëF ½ÉÉ}”99ùú·d‹i•£9Ù¯=øç-=‡ÁÔúFÃPw£x‡µ×n‡i<a£åa],tŽ–ÎWvUÖmAQW€²*Ö´ ŽIe–¡aKÙ<¾áCž?;ãnJDžS‹í¤Ûrýgœ¢i‹Ž
³©8òÛçe‚pw»€ˆZ’V¥ôÝw‹VU†Ž)]”™¤ÔèÀÛ¨ÊéÊAoâš­~MBW Ãéå—=2ëé\’Ô½8´o%/µ¾ìõ¶ÊºRØ3u"G÷Wçñ ×øøQ!4°ÿRë6°ý;mÊc´$f¼¿êòSlм÷§ªïÎ’×Ï„©ŽWña­J$i`xÈvD†Ö‘þmÞu)]ÞDt¼î‘÷Èûþßc_+-ÑÖÁŸë; Û*i(ø¯ ÷‹Íb©úß+­¦¶¢áBåóp¥Ælß‘ ‰zúVÝàSä«ó:¯ŒÎüŒã¡ö;È,dTǦU©X —`záïÔ=Eeq&R¿ë=µ½÷žUx ëHá„IID¨[ߨ-Ú̓]µu‡Á¥T½~(s ’e‚«² ·‹ šø$h,*´yöƒ†>ƒªòÖ F‘ÄÑ÷ õ“wÉÎâ½,µï%™D™l_ÐãFétO¨õˆ<‚†q_Ž“/Ñ픹<sÙ`-Ø~0“Mëú …ƶS‰Êc PGP˜ ÉÙ
VÃ;VÎ1ªŒŒl¥µ2.ÓR?Žêt]¹Ö{eú:OCÈuú
Otú«xú$K Ñqø€àL±´ ÄLÕåÄÃè²ahÎyúñ5P(Ívi=TXá!îÈ›ÏÜ#hÓ+à“Ÿc W4ˆ÷øU–˜° <Jqteï—ß´Ÿob`öœí¸ì_ü6Ïúñ<¨Õoüÿeçïοoÿ~endstream
endobj
226 0 obj
968
977
endobj
227 0 obj<</Type/Page/Parent 205 0 R/Contents 228 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
228 0 obj<</Length 229 0 R/Filter/FlateDecode>>stream
µVÁnÛ8½û+æ˜E!Ù’Û °Xl»[´·¶qOmEÕ¬)R&)»þûλŽ7²HÙäã¼y3#oGLð/ƒéœþy=z½ßNàV­Ì—ø©¼j˜eJ u;.Ån\I%þXý@à d3B&¦Y:'¬d*feš dAÕZt(ß]âW]:ð´Ñ.+)Jøa
ðÚX©½°ÀÖ‚{ì$;9ÒEmŒõ€™J.R@6ÊÙ³išÿçOïA:0U8][߯Lïu'ù U 6F¼×ý—i¼4úË«ø|•¦é·c™Ñ‹y/4âp¦¡ÀôÔ…ÔŒÖï“PÊì¥þÞe»`ùSÆh1™¯ù|pU°¶ü3®åýše^'u Ü -¦#@ÒV:¯Ž¹8v–XzwJ¼ ¸¼@­ÛºÀ;DÕ%ó (ÆóX±¥?œòŠÐ°ÒÄSÀׂoÐä— 4eù#îü„Úè3—ºj-× ú[¥'ÚUÒM¬$êÒkp»Ï_êÒxZ—já÷Æn`mœ‡ÖQ„ü»iîb”Æo¸QTÿµÑê€(Qžôfq€wb¯„÷Éde¶Ä–)a%6Þ-öcÀ…ƆgµrHãv<¦ 5«Å—[—Û·k•#¥«^$¼É&“‡'ÇîÎQ]qÁZÜ}ééG!_pôa¸3ó~1˜4Í£Ö^ »Jà Þ,^—;£;,мCSeìd‰Ãœ¬DI- ¯äÇ›ÏîèéÚ¢–>ÔZ‚µÑYD¾Å‘ò@õ{O¢;–2L=dhpRQãì¥_ƒø)§²u¦ò{f‘oÍÂÉ5–!7t™±hƒy¿É¸Tjø…zÀÝ>0z8b².Hde-5f‡CÛàfZ=Þ¿g¾ugœØ¶¢]Ÿì0¾nN| úƒµ®m¨„Üñ[iÐøÔ×Ó0¢¶-ÞRñc>Ðù¤©8Dêtâ]“9¤c5÷S!Ø@%€U Á„ÿš…9~UÍöâíl‡Ûq?o­½Ó]6ײ‹’]_§Kü•GaÑ仾ÀþN~×ôàV†
t:‰‡’E>¡3sZMɚɹ_Xÿ®FG¿êNendstream
ÅV_oÛ6÷§¸Ç…eKvl'@1¬É‚õemc(Ð좨šµD*$eÇß~w¤äÄžmdiŠ!Çûýá‘Çû^ Cü‰a4¡_^õÞ§½ÁÍ. -hd2ÿò³šV–¢¼äb5(d)Þ¤?0ðâ1Eö1´ŸøÐQGc°ÂHV† 1Ä1 1dJ!éB´UnÁÑD-¸,¤Èá‡ÎÀi`PjŽ¡µ‘Ê \+%¸Ã€•d{KÚ¬µ6©ä"D#ˆ¢„ð¿Ü~iA~u¡Mu˜>êî'cT±!ã£îßtí¤VßÞ†ïÛ(ŠþÞ•¼˜tBCœÎd˜Ú ‚*“ŠÑø#‰²Ôk©¾o™„d!W ’±&¦“vúÌ0'váÏ sá‚™´(†Tú‘Ö•°†w”§Ñ ·1î’Év)ÐÜÖºL:»Ïa
˜{v‚…jª 7¥æÌ1 /&€•(ÝfŸ‚X u„MAX|!øM~etçGÀqæc+­,¹=dÜ€âÅè–ç»Ü™Üšcp×éíàz~ wg fò53âî Ð::²Îè´ú9|Ê{ ý6®Òù/D?eõ.ÐÏúlœåÎþJ´z@Ç|ýø×àëÇ›d`uá^Î`Û>’¢c µ[ƒ;ÕB|ÀóZˆn­ÍÚ:h,Šü½®ç!Km´Ó™ãå\iUn0Jä{#ÛÀŸb]
çúŸÝÇû<‡T,Q´’]²¾ëÀê3žÆå`@ «Ä·Kêb§{K.
Ö”.ô»ö–EÀ‹x8Œvîº;AuÙ kqöµ[3¥|žŒé<F¦[“FIКÀ{a–¢¸ÂÅí²tG[K·Ñ¼¦ÊXÉ;7XYÕ¥èfú¥T¼ð‚qA~\}ù4§¯m²J:_Ýðo¡õ=QýÁ‘èj|d²¤û{-Ýă´ŽÊ¶;qèó+éàš–"2­7ï_2NÕCÅPÖüD=àl— ½T,!ë%²¼’
Ùá;Cã²ð'ì¿c®±œ¸oD#Ús²ÂLøÚóeëˆ×ï­µMM%dwŸL[¾Zž¾˜îÜ…>|ÆOXóDÇsî§ñ¡²•„~A><Q‰…Û]^1í6ˆñzŸƒ9k'c_•“‹c0"0ï6ÿZXù]чé_˜´ºŸŸÕiâ³Nhl<"ÞÃCOó?ÒÞçÞ?Ätendstream
endobj
229 0 obj
860
935
endobj
230 0 obj<</Type/Page/Parent 205 0 R/Contents 231 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
231 0 obj<</Length 232 0 R/Filter/FlateDecode>>stream
xÚ­VÛnÛ8}÷W ô²_'Ùô²võ¾õ…¦F»©” ÷ëw†´d¯Ò*-Ppds.gΜêëd×ô7ƒÕ7 ëÉ›Éë÷w0[¦¢“›[z(¯żX€nÜ«Í:_Âl–ΧóŸožOAÚº¦ßnk<øb·PYS&(³+€mþY=:¯¬[E_¯4š  vÆ:ôÈ0SYš?ž²œ!PâaâÔœ.óØ&P0_$„ç
¦ó»¢¯aÉ™êñ"jpXÛ=° ×„&áçj.2¬Nî‹y—a¿¾¸é<CTóð ŽðhºJH„ÏWäúù%²;'jÏ{U"qxÀít+<¯A„փ꽂%xF‚Ét¥óCÄoDOtç µðéyåÀ;!Ÿ¸ €0xhƒÒꟛ¿ÿ‚€u£ -TÔ-‚l}°5Y–Œã„wØMy û‹¦Aá„‘8Ú¤E1QÖÊr§F:mo—اŸ”Î,ù³‰ƒXù‰†¤ÆÖ£‹5‰²Ì‰ÏRUÇp(7bØ…œˆ¶MâPZS©]ÛId€b“è!;¨o•Ù¦qæ=Âqº4̃¦ÒÓÔˆ½PZlu©·ch¡AS20V@d'tÁ”H­ä¿4 ¹é­Ð}h’€V4õ1T©<©æx¢"…HÉÈÌ#F#Þ I±ãd,’PÇ™ˆÁÿOÃ×[Òæyt‰~è’JK3a
ÇT0{uºŽeãöØóG Q€q˜Ë^/@í…òR×b/4ídûËmëAüž¾=ß…Ë´å⤉\§ÝVsÚ~ó¯ËŸ
AË3»_?fi}¦e Ó¢¥ñÜ£QHk'§…¶Yçð¸^§Z ³kÅÓH¯×o¡jŒ
s¥:8ÞVá Ž©aI[ìáœÞwá~ ‹KÛsj·J,(®Øt­®)Ò‡çe„,“ÎyM笉:Ý¿9윒Äm5\ÐCÕùý….û˃ ¢\°­—cmž[0é¾#êg+µ3ÕV.YÂÑ*¶"!i(ä—Tçø"x{"qöæMq 7Ëë.5éÓ©Ið=½Pð?éT|G`ïirš®æ×ÏÞo–·×ÅÄßWüýÝfòqò=?ââendstream
xÚ­VÛnÛ8}÷W ôÔ²6¾ÔN»éelñ¾õ…F»©” ÷ë;CJ²Wiå-Ppds.gΜêy2ƒú›ÁzäÕäÏíäw0[¶¤“Õ-=¯Ù<›ƒªŸ_o¿Òùf³x>¯ù|û„|
¹©*¡ pOæèÀÓ¯yc-jÏ 6Π߸,F9g™Îï²>Ï‚"ÙÑ<öœ§ÙUÒ;ðÕì 4j+µ—zŸÛÞÿ³y„Z'S_'R'{m,F˜‰LRH<Tüñ”¤ ϧæt‰KÀÔž‚]©aÉ™ªñ"*°X™0 W„&âçj.2¬[÷ż˰€û?Ÿ­º÷ÄÕüQx<Š<h9—Wäúå5%2{+*ÇY qxÄÝt'mŸ@ö^Þ<-=Ádºâù€!â7 'ºSÈ•péy åÀ{‘?q8apÐx©ä7„¿¶Ÿþ-”ÔnŠð ó¦"Ë‚q´x‡íQ”W³¿¨kG›´Èf ŠJê,ßË‘NÆÛ%vñ'é¼,…3Kî¬@â TÞÒÕØ8´¡&Q)ñYÈò”B
=åF ѦŽæF—rßt$ Ø$zHŽò›°Eriœƒypœ…. ó ¨ô85â ¤;ÕcêíšÐ'¨Q ŒØñ]°%¹’ù¿4 éP}h’€’4õ!T!©æÔRCÄddæƒï†ë›‡§*uœ‰ü¿4„ÝV\Œ.ÑO]Piq&Œ•þ f¯Nס zþˆ!
0sÙ+à
Ô^(׺
¸Ò´Öö—ÛÖƒø=}{¹ —qË¿­kŠ'rw[ÅiûÍ7¾.ÿWZžÉÛÍC×g\y\´4žÔií¤´Ð¶›6›áT+¡÷ØcéÍæÎŜŽ3¥?
‹cjXÒ»?§†]¸ŸÈâÒöœZ„­
+6^«„‘k kŠôáx! ¤Õ9¯é”5£Š÷o
{$§(qSôPun`¡Ëþò`ƒ ,E£ü嘛—$LºïA‹êÅJíL•ÉI—,á`Z‘ÔòHƒKª³üI¼mIœ½y“ÝÂêne›ôØ6 Þ¡£
þ—[ÞØ{¦ëùÍ‹÷¨åíMvá÷5¿|ž|‡®^endstream
endobj
232 0 obj
891
914
endobj
233 0 obj<</Type/Page/Parent 205 0 R/Contents 234 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
234 0 obj<</Length 235 0 R/Filter/FlateDecode>>stream
@@ -441,14 +451,12 @@ endobj
endobj
236 0 obj<</Type/Page/Parent 205 0 R/Contents 237 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>>>>>endobj
237 0 obj<</Length 238 0 R/Filter/FlateDecode>>stream
xÚµVMsÛ6½ëWìQž i‹²%9=%vܺã$j­ÜxPBJ Ú£Ÿ]|P²Æ£$ít<#“àî¾÷» |ÿ&0/`:ƒª½_Îï®ar «¿ÌøÀÇÓü*¿‚û–mÜÉzU9©•=[}E‡K˜LCVÌÉaµ ½yMæu2‡-S͸TÐ5°¦yaªMËœÍCà=“¬¸Î.3ø›Y'ÌOñ0ÁtÏ¡eŠà¬3‚µ–8Ü|Y>&;΃rÌ…­Œ\ RÃ0÷
¿Ö¬p+¬Ü(¸ÕUß
åÊ3è­àÄq'Ó¼ äõ”VÙR[÷ˆ:‘Êù$ŒÌÄÀM6øï@ô<ª˜ n™h_WŠ£VlK?I.€q.I4k@ ÷¬Í?yÀT{e¶Ú
Þ7ÂäpÓƒ’šh…?è1„dFž¥ÛúžÚµY>©,c‚ž×õ5o„Y0øê<,o¡j$rÛw6ÎçU¢A¯7Œ‹ˆ1Æ°Ž—ãEyö|œ@˜Ål TvZOKÝ4TÆ?”ÒEÀô¨dÀiÿX’c…y¢zÀa¨ß:ß!OL6lÝ Éµ“öX:Šƒ:¶gØÖ.VBï¥c†¹×hdí¥¿@^»æ˶õQ~>®Œ7¶Î>R¥U-7=#ßð§j~NÆôž¬ùØ<8DºFPC†A‚PÔf„CY••ïëÞaÖ“#V6T8†R%3ôm[ïGù?ÒÆÌÆ·½}XU‘U±ÀïY1 äËb6‡£òJ…¯X+ ó™ñ¸ÅôŒUí¤
™IU_޽Ž*Lgy–¿„<`õÞŸz ÷©ÊZb¬€øå~1ÌÜxZ/Ç„ºæW‘¾`†áÓ^VOïÌZ]IæRZ`þƒ¨•tM‚qô|Ž!3ðÿ¼ÑÄÒ‰ûÕ·k”†;V…e#¾õÒ â¿ÎÝç.Lã ãÛ -¶£C(õ0.QýUx:Î}vÊqÄßG4£¨YŸ”ƱۉŠj‰¿I>T¸m³ ÏWî¥êúЖ„>Ï{NµÑm3<{ÞI†Žº;èVfaz’ãÇû»Ýàžº? †©@ %p X†“lï€c8h%9s»Î瀡Ö-'N„9žpÛnÓ8ݺ$“”ªÀÄYøc™ýþp^x¢î¯x#N®®0‹³é”¢†ûË£®Ý3e'ÝOü Æï•OfpÉæÅůt—‹‹ü¼á5½Xþ}YÚ*endstream
xÚµVMoÛ8½ûWÌÑVJ,'þ螺IÓÍ"m½÷æ -R6[‰TI*ÿ}gø!;†áhIœ™7ïqfÈoƒ\áߦŒ'P6ƒ¿–ƒËû9Œ®aYáÊd†|8ÎoòxhØFÀ½¬ñ§S¥“ZÙ‹åt¸†Ñ(8dÅ”–[Ò›Wd^%sØ2ÅñC­—jºVׯLµi˜³y¼Ï$+æyŸËþcÖ óSy˜`ºÏ¡aŠà¬3‚5–r¸ý¼xJvœ9«!¶4r-8HÃ<(\­X)àNX¹Qp§Ë®Ê­. ³‚Sˆ;ç!¯w ´ÊÚº' Ô:hTÀÈga, }n²Æ¤§‘ŸH¤'pÇDsš).F®<Ø –~–\ã\iVƒîE›¯: Ôž™-·‚wµ09ÜvÆ ¥zzô!™G#é¶^Ãs»6ÉGð(•€EÔ!ð9³q5Y÷ªyëDÌ‚ÁW'àqqe-1g°]Ûjã¼® :¸ D0`\EŒ!†u|5œ­.^ƒ³¨–@fçù°ÐuMeüC*m4Œ˜ 8íW€%:V˜gªÜ†ü­óòÌdÍÖu/F¨´ÇÒQäy´=ý¶†p±rx‹(-3ÌJë@µ×þóÚõiî°lŸ ²Àåãʈqcëì#•ZUrÓ!8¦âþ\ÍOiØß³5‡H[ jÈ0HŠÚŒpHUYŠPñ¾Ná-ªž±²¡Ä1”*™¡oÓx?Òÿˆ3ßöö -àÔÌŠIH8¶b€Ì3÷¸…ôŒUë¤
ÌSU¯†ÞGʵºˆb”‘h6ÍgÈC¯ŠÉ^«@k}Rÿè5<pÌJVÃð/øQî?†vÇ=¦ï«!%°æ@?£®ðqO¶£wf­.%sIÌÄßCu)]=_bôÌÇþß±ou+±ŒâÞvÍ ãî–á³ß:iüwˆû© C:`éøv†¡mélJ­Í£Käl!:ð½|«aˆÉj<òB^¾ÓhŠQ=ÿ ²
El|Rs+J*AþGò¡Òo:œnxsÿQª¶ {Ôn•ÑM"3<˜žb“\NÊŠ®eãy÷ƒ1LbùððáÝáäð—OÒŸ*ý„¡K‹8R,é¸wÀCùj%Nqq»Ö«ÅP•-·gN—)ž–ÛvS;Ýž»Û$“$jÈÄYø{‘½¼,|8¢î¯"x#ŽnnP½ÉxLQÃ]èIWî…ÔIwò»J¾YpɦÅÕ¯‡×³«|JmNïï–ƒß>Þ:jendstream
endobj
238 0 obj
982
988
endobj
239 0 obj<</Type/Page/Parent 205 0 R/Contents 240 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>>>>>endobj
240 0 obj<</Length 241 0 R/Filter/FlateDecode>>stream
@@ -524,39 +532,35 @@ endobj
259 0 obj
118
endobj
260 0 obj<</Type/Page/Parent 205 0 R/Contents 261 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 84 0 R>>endobj
260 0 obj<</Type/Page/Parent 205 0 R/Contents 261 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 85 0 R>>endobj
261 0 obj<</Length 262 0 R/Filter/FlateDecode>>stream
xÚÕ›ÛrÜD†ïýº„ ÍYº$W…ÂÄæ”µ¼ö„v*oÏºç°ØêÜ$«@•“IKŸWÿÌüÝ£™ýçŠUýŸU†WBW«íÕ뇫W7]Å›êá©bª«´‘ÕÃãwýûÍPퟪëýî4ìNÇïþºúé᪩Kp?˜ûñîgר´Pu[m«¶æð÷MuïØg—OëêÕªs¿Íݦí¥ö·±êE|Bn+ÿGÁQ Ü¯ö‡Á¸²pûõâÿc/>·}(+çµ¶®x­ þêF‚Œ¶56ât¬g”Ì [{/sZæHˆêöÑöúø4®úÓ¸ß9¨2öŽéJi×tµŒÚù<¨SŒ5µ ŠqJ1à´Æ
SpBI÷ŸŽ§a;3ÓýV~ÁâGÄ¡ìãHûíã0}N²º[„ð„âªÓVMP<4’âª3¶í„âÈaÏâ€z³_}ØÚaú2/GX ”V݈±Û»°ìlÖv•î¢í†¿GwH&«Lì‘Ï›,ÂTgÇaAóQ¤¼ž†iØ­ŸdW›…{­ ­ÒÉbCã9‹UÊ_ä¤Å"±åV±‚a ]ÿqw?Ó%én;pUã:%gAX8¢Yk}Ùn¡T—"™shdV᧩ך2gä´u•‚a ývús˜fÄN·;ov0g óVÁŒý VáÿþœU0?Åa€’~æ¬õŒ7Ãq\ï^e7ÛÕÆO$·Ïxò2ýFã½Á\ý¨ôg]¦‘Áeí2@씚9Â@zݯþvG($øòÔ{Y:ít²k¼v®Ê xP»ˆ‘ h›“,»ÙÕ¾Í9
âGb¢^ÔB‚Êï_áY|#Ê´Á¼œPœ
H TŽ‚8À6‡ÇoQ(-}9žÅ72¡´
¥ JPB‰qW(ˆìÐOýf3lN,ÅÃ(™óîžÄ72™TIR"‡q7á
Ä=ê8LcïâlA MMˆ$L°aÿ$¾‘‰$Úhçv†2‰qi—{
â;î­£Ÿ¼Pf1~NÉd*™¸od2q•L\S2‰±Ä-dB؇ãû%z“ž/$c©0TKûÌ`âTaŒ[4%Â@z=L›áÓŒê*ûXL*›f ^—Ñ®÷ÛmÅFkíó£RtmJ¡‘F¥è:Lœ,-ä2&/QØæ°ò£²YXK)Õª” B#SªÕ¨UY 'Tâ:¨ôÏ·5wƒH†¥\™H†c.àd]$Öt[È„°ÍaZäp2„RªMé 42¥ü(PŠ*.ÄìêQ•(ˆÌ*µõRuËÊÌçaÍ6æ‚ÐH¹@H¹€zŸŠã\»à@H×?ßz…t½äýjh žyºodCKôtA{:˜tïƒ
ÄÖ?nÇ]½Za}yí(‰X—™¹odñ8L:Ÿ.@!P«M<Ç(Ð%P£2#oTiäF#´‘Éí÷ˆq€ýµ|!ëB&Þñäâ¡‘dâ@¤‹#‰ùÁQ  °Ã4îNÔÓåß¾&ÎM¶ ÉÄyÛ ‰KÂÄ‘ãßûœFÒgì* Š sþ™BY?ØžÙbË(–i Ý3&\€Ð»i¿žúíÖöâ 4Ãl+.\Z/¡á„ÞºQñÔ¯üö¿ý}_xåAM ­S
lbhƒ9H9ILéº+QØõ~÷qØncnFÕŒbUmÜ®FÁÄ zóa·r/¿êzŽÒX‰”ÄB#ÓXá¬"“r7Z(P¿<<ÜÍ›ÝlQÆÊe/@Ò™¨r¯–PWt)†F¦®l0J2"‰1Ww¨GØíÝœÀÙÝn6´ç .@ØùȽän(%5×YåºÌ¢Ü`•t“ÜÍâq€½íwëýzÎ)2„¶Ú9EÄ €xy½)•™H›#¡‘©ÌdLÃä{Z$1æÞùìîîÍÜ€Nw[–vË‘‚…¬ø’bKÔ;M“…FVï4 sŸ¢êà„Š$ç@HŸSïŠq·„+XÖí¶_»õœÏ'‚³!uÎà øv|?õÓ'(ê/º2$ækMJ§¡‘ækÁîY° ‡É.RóÙ¨ëýf?ýlµ’!\µâº½Ú Ï–?Óq¶PÍ –'UÝ•<¼ }nÂ}É5+Õ7F¤dYߘxd@‘Å’˜ß6)P˜ïŸ¹yîwéAZ«*hxà~íw6ÝGõ2ŠíÞÚ±V2áùlŠÿòs‹ê%S¬—t<§ È’ I¡ª,P˜ó«ªJ#­uU}AsUi„}^%†[–¹?K"\Àž/ ¾ü‚ê$™¬“d<#¡Èb ILxÓçg$"ì~Õoæ“JFpïK9/hëÅ, (™EvÂ"42™E<a¡Èj I0–Åù ‹û¼¹€4éÖ¹Íτ݌›ÙÄ”îvo<\þ/Ypzn-¾zÐųs¡‘u]EíÌ#‡ùEA‚¸G½ë§ašï)`†Å˜zÊ_°mI‰}QÌ“Žÿ…F*ŠYO‰h¢(FN'#4/Š#éM?l“ë.ðÌ1$»ì´HWéâYM£qK©îü¤’ÞŽ»Z¨!I¹Éœa@Ý…×Ósoà"Àed·7YÐBýâA~ýo€]Ô²”H[VäÑ6žRÑdE
˜°?sBHwû •Cãýn5í^ç0-ÓU_lßœp ݦU´n‹E´ŽçR õÕ¥i]–CB°‹¹Îí¨Ày²¥îü£QeÇSTy:E]Ò.âR¹.(!ê9Ö›ÓþàåjrÚÈìTŠ,¥Èx&ÅЇ‚áHŠŒÌòØ] ® C¤¸øF&kˆ÷‚ÙAÞží`Öqèo¹áŠÿ†oÿ·} çʃ8“¯€à+•AA›ôDMüŠn _I`Þ'`­ò¯Úî÷O§ûi¨àöÕ4ð{G‚»ä¶þGPí÷«ÿâ,$“endstream
xÚÕ›]sÛ¶†ïý+xyzQ…ø$xÙ8u뙜©OìþF¦Uµú*¥¤“°À.hdnn±ÍŒtÁÇâ ðÝý}#ªÚÿU#+e«åöæíÓÍ›»¶’uõôR ÓV¶ÑÕÓ󞺛¾Ú¿T·ûݩߎ?<ýyóóÓM½¨=~øñáhTV·þç¶r ‰ÿÞTÀ>ë>¬ª7w¦~›¿ÌÔð»Dõ*<·•2 WÒC42—ûCiªð?³ÿO¼z×Ê‚¦á~·•‘ ƒ ¼í7w%ôch}gT\Lè˜A¶þZJæHŒ#êþÙøúe½ìNëý ¦ñ‘éÊi'åÂŽÚ…Þ((&•oÅ$§r\³°%ÃHzür<õÛ‰iœ®÷ò+1~DšÈ1Ž´ß>÷Ãçuÿà´X´³žS¼nzT<42ÅE½ÐQqÅ)ŽQÃ|.@1N¨wûå§­Ÿ¦¯ór„jíÿ.€Øˆ…ìÒÏ+Ë.&-×85Znü÷èÉ` w&§ –P¦õó¯`Åh`|è_ú¡ß-û ¼ 73÷Y5=am“½ÆÆ%{5M=Q²öJD'ý_1†‰tûûÃãÄ€¤«ý¤55 IΊqbÑS0µµ×Nuc“1ÇF² cšh€’5fâ¸Ú;JÁÁ0’~;ýÑb§ËÁ—Á
ÆFbÓ¨i›ð7%É&¿/Ù„‚TèoE1F0æ`N‹Q¤¼ëëÕîuTv¹ÿ`nü”ÈÂ0ÂÎ\yž®c˜Y/šh°an†ÆE¯á™V¼Ó ¯50=sçm·ü«ß=±ŒóSîuÙ ²Õ*¸` eilàmúå‹©õ‚äš*ßú…q„­ µ˜Õ2‚J·up°p/±‘„Ò­ˆöBIF("E¡
ƶ9<ÿ…jšP Æ{ L¨ÆÅB„RœPH…q„º¡Ûlú àÔ\ü‹“ÉêàÍñNB#“ÉL^&ÍÉ„$!a&(Œ#ìØë.ˆ$ÅŒ–š–ʈhÄá^B#ÊŒ2N&ä©ýr¯a<Š´÷Ž~
"5³ñsN"Õ$L"å’‰[N$$ ‘¸…Hûtü8Go²ÓE‚öc?–Ʊ‘Jc- ™8WÇuÉÁ0’ÞöÃ_ý¦ÿ2¡ºÉ>–ÐÆ§Ù‚×f´ÛývÛQ±á¼}^YxnV
%‚ÐÈf¥Ÿ`˜$[Z 2¦,QGØæ° ³²žY Ë(¥Z—rAl$¥TÛR.lmA¤X[(Œ#lsø{ŽÏoÃåLʱ‘ åèée+ ∺©…L °a–Ó‰S©)ÄF¦R#)H¶´ ’ðëS¢0Ž0¯Ô6HÕÎG¨f:(ãR.ˆ TxOTâÞ¦§W*8FÒí/÷A!»˜óî 7µ|†==6²©¥-yºb=HBá…q„uÏÛõn±\­ãûúÚq)™™yhd)Ef®x3G’ÐàÒ
ã[nºã±?Ž"Í`Šq"‰63rÑ–F.k’ˆ5räÀ~*A1Qî?Žê(9“µ'Qm2¯Méâµ%W¼‹#I„‰Q 0Ž°Ã°Þú!M¤ë¿eL\¶Ù&dl$—­"׌‰'¼ù/8FÒWì+J¨æü3aY?ÜþØ`Ë(žéË·3&u@èð_ ÝvëGqša¶•T³J(v@è=ÌŠ—n6ÿýïûÆ+æÁM›rPl¤Cºšrfs‘„±‹¶DÅ8Án÷»Ïýn [sªf¯j û;ôîÓn ƒO/¿ëzŽÓØÚ”Äb#ÓØ6”Ä4›Äˆ$d3r öëÓÓĸÙåÖ€†ÌwH¬3i¯äaŽÑب”c#ÓØŒ³˜ËÄ„ñ€º˜’7»žwþ‘¨ÃÅ™{ÍýPNdÕ¦,™Èº¦,ªÙ,J$¡%<Å9*Æ ö¾Û­>u«)§Èè,8EÄD¼¾ÞœÊҦ͑ØÈT–͘†Ù·´DÞù(Œ#ìááÝÔtNW{–…åHÁ¢+¾fè˜zG¨t(6²zGhÊ}†«w+’œƒa$}M½ƒ(!a}R°0ެûm·ZïVSŸ`BæœGø~ýqè†/XÔ_ueÈ=u¥Óº.ÓiM'†/YÍ…q„Ýî7ûáxè&+– Kúé;äD_ ÇÉr5gx¢_Õ·%:ˆK‰Z~Óu+3FÂ5)ÇFG„×øãnŸ©g!] )B{»*XÔ!ÀþÛí|ÂaŽêe ?4Òù¹V±ƒ»JÅN“ltšñœ‚aË%"ÅŠ²@aaàW=W‘Ž4¥gAƒŠt„}Ý%,Ë`;·$b}¹,øö nlvF"6²A²ã Ã[D
<¡@aaËn3T2,À‘
u—Jë$Nf°ˆLf=ž°0lµE$œËúü„ÅûºghÖ¹-< »[o&“RºÞx@ò(YØÁ]ZF«ï^´Ì`©ìœGldƒ¥LJýÜÞ<‘D¨Z Æö¡;žúaz´lÂ5bü˜i´Bs)I«kUZíti,¤Hc#•ƾrŒ2[¦0&J«Gd^#ç]×o“ïÎðÔ7)ëìÀHld“²ŒX¶%R\P(Œ#ìýz×s f`k²€Q¤=Ä7ÕS/ã²3l•@ì€À8¢a)¡¿ÿ·A˜ájuJ«­.²j;žY±leŠ˜¸WsbIû —QÇëam /s†‘–éj¯¶‹Î8‡iMíD±¤vã)•†1„8¨,rH Ê1óÁþ
ž.›ë>03mvXÅ–gUìxT¥a1xlÁ‰Q$ýqXmNûCL™yHÆèc²3*¦<¢b,©Ã=«uA‰ÑÀYCQFâhuõmMQs²SŠå©=JiøcÁx&%|‰DŸI!Š3„Z¿^yÅÙÃi#]öÕ•ïOÇ£( ÿ’:bàÄtɉQ$ž_Ægj»áQžtSõøMf‡ßÝð’ܶ¸wV…û—Ó?ÝÐWømÿ×rXè{ZJBrÿ±‰gÖ¨ÜÿnþMà_ endstream
endobj
262 0 obj
2325
2356
endobj
263 0 obj<</Type/Page/Parent 205 0 R/Contents 264 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>>>/Annots 120 0 R>>endobj
264 0 obj<</Length 265 0 R/Filter/FlateDecode>>stream
xÚÕšßSÜ6€ßù+üØ>Äh%Ë–i™tÊ -—¾_Cœ¹;_m“–þõÕ]K"Ã)yé™$YÖþÀòZZù¯3(˜ù …¨í¿Íîì—ÕÙù•.8+V÷H]ÔMU¬î~Z­?mÛ¢¿/Þöû©ÝOãÏ«/gïVg¬d†`?€ýðÇû¢á%+j!KUì
]O>Ø·–þì„á¡8¿ª
ûýn޵g˜o(ʦ¬Š¿KÞÀõóoƒy„îî§þà~fÁÍ—˜ýbyÊ?À29/ëY  ðʬ$.LŒ’dN’€W¥NQ˜GØa$G¼)ù}‡%¦Í !K.ˆ,++²Tç,! „6F”ÏÌZÖãÔXÁ©=åIóãsR䃠Hjû›FEMF@J£"Aaa^ÏÔ·‡±ß[¦´£ôdž²†”0É "CjB*ç9P1ã2a¾Ší|>¸dÈ'BY?µµÜ‘Ÿ†…z­s†Ì ™ |ž`SûÏôz
¶yÊK²veVr3Ö}€—f¬R6T°Œ¢èTgûÓHºÝ|nï·T†dX™¡?×nDꪨv«
I íLP˜GØÅãô¹º×Sç SÍJq2oYA‚E•Û T¹•ùOF’ü<)Aaao·ëqluÛAF4QñvA$ )9EÈ7J@˜W^Pg&¿nŽTò™öCŠ˜ˆê· "E¬*gI¹ù6@*[Šbæf ÷ÝÃãßh§+P9A•fa®íƒ ¨Ò0—îì\›H`0°Ëök·yU7ZÕ4¡\û ’Ô¨P®sSm"yj5)
ó»ì†vcfÛO/c†!š3uJ¤A|e~Ôÿ]|Ös]…ªïƒÈs-CÕÏÍ׉`—|
óûpscI –RѾ˓„Pø}y’³¥Ü¬8µyH$ Ì;Ô¯ý'7h@/EQVhBÙ÷A$H¨PösÓv"¹cXŠÂ<Â~ëºýƒ»¹ä¯|½f®^»(’Äe(ýÀŽT¡èt;…°×žÀèä]¯;÷TäpòÅO¾ÀúëpQäɘ0Y‡¬'‚‰o`tò®?\¿[P?*gIhå ®»
KBëP»ç,Í0^›A’ÀèäÝÜ\Ž8šÔ«MBI_rýu¸(ò¤Â='²–%ìr9AÑŽv3tû©–3á:âȵD®æºE¿B;A4œª·Î´ˆ£lÛ á`I·OãÔî^†Eç›GŠ]O%0L#ìÏ#”pªªçW‡yNëˆÝn½¿s¿¶ª9q±Ìk©Â2ÂѨ–šž%:ÛÐ ’mÙ?Caaëͦ=LX"Åë¸ù+Ö>ˆ,U5=I«A$´£0°Íz¿i·¯Ë’{6’%D–„ '‰Î66ˆÜ6Çæv×vÏUH¶IYG Ã
À#ÎÈP®«A?oK@>ïQížô¼žQÄ¢]XD†Ø¼Óª³ "ù,Ræ¶u»jIÍèœ%®£­VK\P·s "b$(Ì#l{Xßíü`! %qÔD­>ˆ)ªv®+A$Ûhe)Êç ¶=tûû~a­Öœ¦:ÚlõA¤©nBÙε%ˆä[ö
óÛvý×vIÄœ#m·ú r$ç”ëJ& Ìã0ê í§þj ɬ »¤nã£ÈPÅBÙÎ7%f˜YFB
È·=ŒÓzZV["gŠ×QûÆG)ÞDSîl[b†¹w£7´_ÚÍ´¬%÷˦˜Åpо™à¼´ó+‰/_Ù£pð☫™à§"Åa9ï·ý8®‡'wëÙe϶¨¿±(/ÊAùMBiߤòÁ¬‘Þa3ËsP8¶Î‹fq.f8-Î}ÚqVí°£×²Ôfµ5~ÛÐ_T#^4¸gxqlÁjG±-Y ó„Ú ýþÉK«ª…LÖŸé
×Èæ÷ Ž!éÞý¨p{¦xûñ涸íï§¿×C[\¶c÷°·Ÿ6Cw  Ö7ö­,U¼iüb¥ëPåïgÿ2´Oendstream
xÚÕšMsÛ6†ïþ<¶‡0X€ £kÇ™tê·V{WdÚfFU’Nëþúâc—œ±Ð\*:É8³^ê‘ð
|]ðÏ3(˜ù …¨í¿Íîì§ÕÙû+]pV¬î º¨›ªXÝý°ZÞ¶E_\ôû©ÝOã«/gVg¬d†`€ýñÛÇ¢á%+êJ›Ÿ»B×¥Â`[ÜZú‹ Åû«ª°ï×ð¢–̾(›R¯¾G„ÝÀ«R§oâóu§þà>.oJ^¸ß•§ý,£žæó“z.ÀY…„ý-jTç4BmôLP˜G˜UiXS;X`§Ö)+çfð$ "‰¸01JÔä$BHYV)
óóòL}{û½eJ;GO¦SV!¦ÍxH!D
++RHåBT̨™ |ž`¤ÐãÁM"Ã>ñ4Êi$Íç礑FR[¿@tF#"3[æOdH‚›Ìé éˆJÆŒJJ8£•ÜÌwàÐÌš!Σ#³(z¡ÓúÓŽs»ylïž¶dC 1ìï™RµÞíƒhJ5Œ¼[•›RHi§_‚òy‚?MýÐý³ž:oL5+ÅÉtË
$ëàÜ>ˆ 9·2ß}F $×/Q˜GØÅv=Ží¢n9ȈdÌs6oD"U™·2_tF$$æv±í̾Î퓪S®kß%“`‘» ’Iù·2CÌÈ„$ÊšQŒÂ<ÂÌþ÷¾{xâ›ít&•š°÷A$Ì^”ÛkÌýÃSæê²ýÚmÞÖÆDd×.ˆbU°ëÜVH`V­&Eaa—ÝÐnÌnûùu`Ì0ÄFÙˆ¼m‡ |e>êÿ.|NçJ³àú>:W‚ëçöëD°;õ…y„}º¹±$Kq³ÿ¤SÓã÷A¤S£‚ñçvíD¨Í"‘ 0°ŸûÏnâ€^ŠLY‘ê*ؾ"jl?·m'˜»†¥(Ì#ì—þá¡Û?¸L.aBe5’à›YÇöQ$’œ%vć¢Û-„y‚¢ ízݹ‘ÃÉ ?Ôˆg47X?
E mÖ!«ÁÄ70ºyן®?,¨•U‰WÞpý(\©d&ÅìÝÀ³*Œ×f$0ºy77—#Î&õ6f€7\?E:™åjönY&l¹œÀèäÝ Ý~j‡ålºŽèäÚ B+ç¹®ì÷Ah'­É½u¦¡@e«¼„ƒi$Ý>S»{½Þ,)¶¢J`˜G”ðR» T/G‡yMuÄn·Þß¹¯­jNl˜¹©-” e„ÂÌ
ïmiǶì_€0ïPëͦ=Lh‘âMÜü¢PGø R¨á´’èlWƒH¨QŒÂ<Â6ëý¦Ý¾-•¤
U€"•¤.ç™”kk ¸mŽ%(Ì#ì®íÑ•sG¶‘²U2T>ˆ4ªjZE§A$¿oKP˜GX»'‰ÞÎLr»,RÉJBÌ‹H¶µA$`ÒúsŒÂ<¶îTC-©!U ¢cXD*qFåzÄ·ÁH@>ïQÛÃúnçk€…I"£Z}éÃêàÚ¹®‘l›•¥(Ì#l{èö÷ýÂÚ¬™¸Ž[}dâZÛÎ5%ˆä[ö
óÛvý×vIÄœFMtÜêƒH#Å‚mçzDa·… Êç ¶=ôÛ…ö[µ€b2+R§¤®„ñQ¤RÝÛη%f˜)%!…Ñ 9÷8­§eµ&rJIµo|)%çÙ”oLÌ(Wr'(ºÀŸÞ·_ÚÍ´¬’ûu•˜‰ã }.Á8°÷WŸ)²Wá1àù1¥f+LEŠÃ4r>nûq\Ïî¶³EÏÂŽ¨¿QQ/È9ø#BiŸ£òÁ,#=šeJsxRx~¬Î‹ ¦43žJsŸFÒªvôh–Z¢ŒYé˜?6ôÃb,éep†g†çÇŠ¾è¥v&Û3ý„yBm†~ÿìE«ª…lÖ_ÈÆÈæGüÎ#éžþì„¿ßÜ·ýýô×zh‹Ëvìöö¿ÍÐè€õ}2Kï¿Éì:”ò׳W}ïendstream
endobj
265 0 obj
1567
1550
endobj
266 0 obj<</Count 5/First 267 0 R/Last 345 0 R>>endobj
267 0 obj<</Parent 266 0 R/Title(Table of Contents)/Dest[260 0 R/XYZ null 756 null]/Next 268 0 R>>endobj
@@ -573,20 +577,20 @@ endobj
278 0 obj<</Parent 276 0 R/Title(3.1.2 lpd)/Dest[224 0 R/XYZ null 227 null]/Prev 277 0 R/Next 279 0 R>>endobj
279 0 obj<</Parent 276 0 R/Title(3.1.3 parallel)/Dest[224 0 R/XYZ null 133 null]/Prev 278 0 R/Next 280 0 R>>endobj
280 0 obj<</Parent 276 0 R/Title(3.1.4 serial)/Dest[227 0 R/XYZ null 713 null]/Prev 279 0 R/Next 281 0 R>>endobj
281 0 obj<</Parent 276 0 R/Title(3.1.5 socket)/Dest[227 0 R/XYZ null 514 null]/Prev 280 0 R/Next 282 0 R>>endobj
282 0 obj<</Parent 276 0 R/Title(3.1.6 usb)/Dest[227 0 R/XYZ null 394 null]/Prev 281 0 R>>endobj
283 0 obj<</Parent 275 0 R/Count -4/First 284 0 R/Last 287 0 R/Title(3.2 Berkeley Commands)/Dest[227 0 R/XYZ null 300 null]/Prev 276 0 R/Next 288 0 R>>endobj
284 0 obj<</Parent 283 0 R/Title(3.2.1 lpc)/Dest[227 0 R/XYZ null 227 null]/Next 285 0 R>>endobj
285 0 obj<</Parent 283 0 R/Title(3.2.2 lpq)/Dest[227 0 R/XYZ null 118 null]/Prev 284 0 R/Next 286 0 R>>endobj
286 0 obj<</Parent 283 0 R/Title(3.2.3 lpr)/Dest[230 0 R/XYZ null 724 null]/Prev 285 0 R/Next 287 0 R>>endobj
287 0 obj<</Parent 283 0 R/Title(3.2.4 lprm)/Dest[230 0 R/XYZ null 668 null]/Prev 286 0 R>>endobj
288 0 obj<</Parent 275 0 R/Count -4/First 289 0 R/Last 292 0 R/Title(3.3 CGI)/Dest[230 0 R/XYZ null 611 null]/Prev 283 0 R/Next 293 0 R>>endobj
289 0 obj<</Parent 288 0 R/Title(3.3.1 admin.cgi)/Dest[230 0 R/XYZ null 525 null]/Next 290 0 R>>endobj
290 0 obj<</Parent 288 0 R/Title(3.3.2 classes.cgi)/Dest[230 0 R/XYZ null 455 null]/Prev 289 0 R/Next 291 0 R>>endobj
291 0 obj<</Parent 288 0 R/Title(3.3.3 jobs.cgi)/Dest[230 0 R/XYZ null 385 null]/Prev 290 0 R/Next 292 0 R>>endobj
292 0 obj<</Parent 288 0 R/Title(3.3.4 printers.cgi)/Dest[230 0 R/XYZ null 329 null]/Prev 291 0 R>>endobj
293 0 obj<</Parent 275 0 R/Count -5/First 294 0 R/Last 298 0 R/Title(3.4 CUPS Application Programmers Interface)/Dest[230 0 R/XYZ null 259 null]/Prev 288 0 R/Next 299 0 R>>endobj
294 0 obj<</Parent 293 0 R/Title(3.4.1 Convenience Functions)/Dest[230 0 R/XYZ null 186 null]/Next 295 0 R>>endobj
281 0 obj<</Parent 276 0 R/Title(3.1.5 socket)/Dest[227 0 R/XYZ null 448 null]/Prev 280 0 R/Next 282 0 R>>endobj
282 0 obj<</Parent 276 0 R/Title(3.1.6 usb)/Dest[227 0 R/XYZ null 328 null]/Prev 281 0 R>>endobj
283 0 obj<</Parent 275 0 R/Count -4/First 284 0 R/Last 287 0 R/Title(3.2 Berkeley Commands)/Dest[227 0 R/XYZ null 234 null]/Prev 276 0 R/Next 288 0 R>>endobj
284 0 obj<</Parent 283 0 R/Title(3.2.1 lpc)/Dest[227 0 R/XYZ null 161 null]/Next 285 0 R>>endobj
285 0 obj<</Parent 283 0 R/Title(3.2.2 lpq)/Dest[230 0 R/XYZ null 724 null]/Prev 284 0 R/Next 286 0 R>>endobj
286 0 obj<</Parent 283 0 R/Title(3.2.3 lpr)/Dest[230 0 R/XYZ null 681 null]/Prev 285 0 R/Next 287 0 R>>endobj
287 0 obj<</Parent 283 0 R/Title(3.2.4 lprm)/Dest[230 0 R/XYZ null 611 null]/Prev 286 0 R>>endobj
288 0 obj<</Parent 275 0 R/Count -4/First 289 0 R/Last 292 0 R/Title(3.3 CGI)/Dest[230 0 R/XYZ null 555 null]/Prev 283 0 R/Next 293 0 R>>endobj
289 0 obj<</Parent 288 0 R/Title(3.3.1 admin.cgi)/Dest[230 0 R/XYZ null 468 null]/Next 290 0 R>>endobj
290 0 obj<</Parent 288 0 R/Title(3.3.2 classes.cgi)/Dest[230 0 R/XYZ null 399 null]/Prev 289 0 R/Next 291 0 R>>endobj
291 0 obj<</Parent 288 0 R/Title(3.3.3 jobs.cgi)/Dest[230 0 R/XYZ null 329 null]/Prev 290 0 R/Next 292 0 R>>endobj
292 0 obj<</Parent 288 0 R/Title(3.3.4 printers.cgi)/Dest[230 0 R/XYZ null 273 null]/Prev 291 0 R>>endobj
293 0 obj<</Parent 275 0 R/Count -5/First 294 0 R/Last 298 0 R/Title(3.4 CUPS Application Programmers Interface)/Dest[230 0 R/XYZ null 203 null]/Prev 288 0 R/Next 299 0 R>>endobj
294 0 obj<</Parent 293 0 R/Title(3.4.1 Convenience Functions)/Dest[230 0 R/XYZ null 130 null]/Next 295 0 R>>endobj
295 0 obj<</Parent 293 0 R/Title(3.4.2 HTTP Functions)/Dest[233 0 R/XYZ null 724 null]/Prev 294 0 R/Next 296 0 R>>endobj
296 0 obj<</Parent 293 0 R/Title(3.4.3 IPP Functions)/Dest[233 0 R/XYZ null 668 null]/Prev 295 0 R/Next 297 0 R>>endobj
297 0 obj<</Parent 293 0 R/Title(3.4.4 Language Functions)/Dest[233 0 R/XYZ null 598 null]/Prev 296 0 R/Next 298 0 R>>endobj
@@ -725,45 +729,45 @@ xref
0000008801 00000 n
0000008906 00000 n
0000009011 00000 n
0000009115 00000 n
0000009218 00000 n
0000009321 00000 n
0000009653 00000 n
0000009758 00000 n
0000009863 00000 n
0000009968 00000 n
0000010073 00000 n
0000010178 00000 n
0000010283 00000 n
0000010387 00000 n
0000010492 00000 n
0000010597 00000 n
0000010702 00000 n
0000010807 00000 n
0000010912 00000 n
0000011017 00000 n
0000011122 00000 n
0000011227 00000 n
0000011333 00000 n
0000011439 00000 n
0000011545 00000 n
0000011651 00000 n
0000011757 00000 n
0000011862 00000 n
0000011968 00000 n
0000012074 00000 n
0000012180 00000 n
0000012286 00000 n
0000012392 00000 n
0000012498 00000 n
0000012604 00000 n
0000012710 00000 n
0000012816 00000 n
0000012922 00000 n
0000013028 00000 n
0000013132 00000 n
0000013237 00000 n
0000013342 00000 n
0000009116 00000 n
0000009220 00000 n
0000009323 00000 n
0000009426 00000 n
0000009765 00000 n
0000009870 00000 n
0000009975 00000 n
0000010080 00000 n
0000010185 00000 n
0000010290 00000 n
0000010394 00000 n
0000010499 00000 n
0000010604 00000 n
0000010709 00000 n
0000010814 00000 n
0000010919 00000 n
0000011024 00000 n
0000011129 00000 n
0000011234 00000 n
0000011340 00000 n
0000011446 00000 n
0000011552 00000 n
0000011658 00000 n
0000011764 00000 n
0000011869 00000 n
0000011975 00000 n
0000012081 00000 n
0000012187 00000 n
0000012293 00000 n
0000012399 00000 n
0000012505 00000 n
0000012611 00000 n
0000012717 00000 n
0000012823 00000 n
0000012929 00000 n
0000013035 00000 n
0000013139 00000 n
0000013244 00000 n
0000013349 00000 n
0000013625 00000 n
0000013659 00000 n
0000013693 00000 n
@@ -857,143 +861,143 @@ xref
0000025759 00000 n
0000025779 00000 n
0000025934 00000 n
0000026941 00000 n
0000026962 00000 n
0000027075 00000 n
0000027260 00000 n
0000027281 00000 n
0000027436 00000 n
0000028837 00000 n
0000028859 00000 n
0000028972 00000 n
0000029162 00000 n
0000029183 00000 n
0000029333 00000 n
0000030372 00000 n
0000030393 00000 n
0000030552 00000 n
0000031483 00000 n
0000031504 00000 n
0000031635 00000 n
0000032597 00000 n
0000032618 00000 n
0000032749 00000 n
0000033673 00000 n
0000033694 00000 n
0000033844 00000 n
0000034897 00000 n
0000034918 00000 n
0000035049 00000 n
0000035795 00000 n
0000035816 00000 n
0000035947 00000 n
0000037080 00000 n
0000037102 00000 n
0000037242 00000 n
0000038196 00000 n
0000038217 00000 n
0000038348 00000 n
0000038939 00000 n
0000038960 00000 n
0000039073 00000 n
0000039262 00000 n
0000039283 00000 n
0000039423 00000 n
0000040091 00000 n
0000040112 00000 n
0000040225 00000 n
0000040414 00000 n
0000040435 00000 n
0000040589 00000 n
0000042985 00000 n
0000043007 00000 n
0000043162 00000 n
0000044800 00000 n
0000044822 00000 n
0000044877 00000 n
0000044982 00000 n
0000045126 00000 n
0000045232 00000 n
0000045352 00000 n
0000045461 00000 n
0000045610 00000 n
0000045720 00000 n
0000045827 00000 n
0000045981 00000 n
0000026946 00000 n
0000026967 00000 n
0000027080 00000 n
0000027265 00000 n
0000027286 00000 n
0000027441 00000 n
0000028846 00000 n
0000028868 00000 n
0000028981 00000 n
0000029171 00000 n
0000029192 00000 n
0000029342 00000 n
0000030390 00000 n
0000030411 00000 n
0000030570 00000 n
0000031576 00000 n
0000031597 00000 n
0000031728 00000 n
0000032713 00000 n
0000032734 00000 n
0000032865 00000 n
0000033789 00000 n
0000033810 00000 n
0000033960 00000 n
0000035019 00000 n
0000035040 00000 n
0000035171 00000 n
0000035917 00000 n
0000035938 00000 n
0000036069 00000 n
0000037202 00000 n
0000037224 00000 n
0000037364 00000 n
0000038318 00000 n
0000038339 00000 n
0000038470 00000 n
0000039061 00000 n
0000039082 00000 n
0000039195 00000 n
0000039384 00000 n
0000039405 00000 n
0000039545 00000 n
0000040213 00000 n
0000040234 00000 n
0000040347 00000 n
0000040536 00000 n
0000040557 00000 n
0000040711 00000 n
0000043138 00000 n
0000043160 00000 n
0000043315 00000 n
0000044936 00000 n
0000044958 00000 n
0000045013 00000 n
0000045118 00000 n
0000045262 00000 n
0000045368 00000 n
0000045488 00000 n
0000045597 00000 n
0000045746 00000 n
0000045856 00000 n
0000045963 00000 n
0000046117 00000 n
0000046214 00000 n
0000046324 00000 n
0000046439 00000 n
0000046552 00000 n
0000046665 00000 n
0000046762 00000 n
0000046920 00000 n
0000047017 00000 n
0000047127 00000 n
0000047237 00000 n
0000047335 00000 n
0000047479 00000 n
0000047582 00000 n
0000047700 00000 n
0000047815 00000 n
0000047921 00000 n
0000048100 00000 n
0000048215 00000 n
0000048336 00000 n
0000048456 00000 n
0000048581 00000 n
0000048688 00000 n
0000048849 00000 n
0000048974 00000 n
0000049107 00000 n
0000049240 00000 n
0000049364 00000 n
0000049491 00000 n
0000049601 00000 n
0000049749 00000 n
0000049862 00000 n
0000049970 00000 n
0000050118 00000 n
0000050220 00000 n
0000050336 00000 n
0000050456 00000 n
0000050570 00000 n
0000050683 00000 n
0000050800 00000 n
0000050920 00000 n
0000051037 00000 n
0000051139 00000 n
0000051290 00000 n
0000051397 00000 n
0000051511 00000 n
0000051624 00000 n
0000051744 00000 n
0000051858 00000 n
0000051983 00000 n
0000052093 00000 n
0000052204 00000 n
0000052318 00000 n
0000052430 00000 n
0000052542 00000 n
0000052654 00000 n
0000052757 00000 n
0000052903 00000 n
0000053003 00000 n
0000053116 00000 n
0000053230 00000 n
0000053343 00000 n
0000053452 00000 n
0000053566 00000 n
0000053679 00000 n
0000053792 00000 n
0000053908 00000 n
0000054022 00000 n
0000054123 00000 n
0000054257 00000 n
0000054354 00000 n
0000054454 00000 n
0000046253 00000 n
0000046350 00000 n
0000046460 00000 n
0000046575 00000 n
0000046688 00000 n
0000046801 00000 n
0000046898 00000 n
0000047056 00000 n
0000047153 00000 n
0000047263 00000 n
0000047373 00000 n
0000047471 00000 n
0000047615 00000 n
0000047718 00000 n
0000047836 00000 n
0000047951 00000 n
0000048057 00000 n
0000048236 00000 n
0000048351 00000 n
0000048472 00000 n
0000048592 00000 n
0000048717 00000 n
0000048824 00000 n
0000048985 00000 n
0000049110 00000 n
0000049243 00000 n
0000049376 00000 n
0000049500 00000 n
0000049627 00000 n
0000049737 00000 n
0000049885 00000 n
0000049998 00000 n
0000050106 00000 n
0000050254 00000 n
0000050356 00000 n
0000050472 00000 n
0000050592 00000 n
0000050706 00000 n
0000050819 00000 n
0000050936 00000 n
0000051056 00000 n
0000051173 00000 n
0000051275 00000 n
0000051426 00000 n
0000051533 00000 n
0000051647 00000 n
0000051760 00000 n
0000051880 00000 n
0000051994 00000 n
0000052119 00000 n
0000052229 00000 n
0000052340 00000 n
0000052454 00000 n
0000052566 00000 n
0000052678 00000 n
0000052790 00000 n
0000052893 00000 n
0000053039 00000 n
0000053139 00000 n
0000053252 00000 n
0000053366 00000 n
0000053479 00000 n
0000053588 00000 n
0000053702 00000 n
0000053815 00000 n
0000053928 00000 n
0000054044 00000 n
0000054158 00000 n
0000054259 00000 n
0000054393 00000 n
0000054490 00000 n
0000054590 00000 n
trailer
<</Size 349/Root 348 0 R/Info 1 0 R/ID[<8de922e9a9f5038e4e82e5319b2335a2><8de922e9a9f5038e4e82e5319b2335a2>]>>
<</Size 349/Root 348 0 R/Info 1 0 R/ID[<37fb8667307f7e56a5efc07d8835ab6c><37fb8667307f7e56a5efc07d8835ab6c>]>>
startxref
54682
54818
%%EOF
+14
Ver Arquivo
@@ -138,6 +138,20 @@ The options can be any combination of the following:
<LI><CODE>parity=<I>none</I></CODE> - Turns parity checking off.
<LI><CODE>flow=dtrdsr<I></I></CODE> - Turns DTR/DSR (hardware) flow
control on.
<LI><CODE>flow=hard<I></I></CODE> - Turns RTS/CTS
(hardware) flow control on.
<LI><CODE>flow=none<I></I></CODE> - Turns flow control off.
<LI><CODE>flow=rtscts<I></I></CODE> - Turns RTS/CTS
(hardware) flow control on.
<LI><CODE>flow=xonxoff<I></I></CODE> - Turns XON/XOFF
(software) flow control on.
</UL>
<H3>socket</H3>
+1074 -840
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+8080 -7796
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
+262 -4
Ver Arquivo
@@ -1,7 +1,7 @@
<HTML>
<HEAD>
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SPM-1.1.1">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2001, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SPM-1.1.6">
<META NAME="Author" CONTENT="Easy Software Products">
<TITLE>CUPS Software Programmers Manual</TITLE>
</HEAD>
@@ -10,7 +10,7 @@
<H1 ALIGN="RIGHT">Preface</H1>
<P>This software programmers manual provides software programming
information for the Common UNIX Printing System ("CUPS") Version 1.1.1.
information for the Common UNIX Printing System ("CUPS") Version 1.1.6.
<EMBED SRC="system-overview.shtml">
@@ -450,6 +450,65 @@ if (jobid == 0)
puts(cupsErrorString(cupsLastError()));
</PRE></UL>
<H3>Passwords and Authentication</H3>
<P>CUPS supports authentication of any request, including
submission of print jobs. The default mechanism for getting the
username and password is to use the login user and a password
from the console.
<P>To support other types of applications, in particular
Graphical User Interfaces ("GUIs"), the CUPS API provides
functions to set the default username and to register a callback
function that returns a password string.
<P>The <A HREF="cupsSetPasswordCB"><CODE>cupsSetPasswordCB()</CODE></A>
function is used to set a password callback in your program. Only one
function can be used at any time.
<P>The <A HREF="cupsSetUser"><CODE>cupsSetUser()</CODE></A> function sets
the current username for authentication. This function can be called by
your password callback function to change the current username as needed.
<P>The following example shows a simple password callback that gets a
username and password from the user:
<UL><PRE>
#include &lt;cups/cups.h&gt;
const char *
my_password_cb(const char *prompt)
{
char user[65];
puts(prompt);
/* Get a username from the user */
printf("Username: ");
if (fgets(user, sizeof(user), stdin) == NULL)
return (NULL);
/* Strip the newline from the string and set the user */
user[strlen(user) - 1] = '\0';
cupsSetUser(user);
/* Use getpass() to ask for the password... */
return (getpass("Password: "));
}
...
cupsSetPasswordCB(my_password_cb);
</PRE></UL>
<P>Similarly, a GUI interface could display the prompt string in a
window with input fields for the username and password. The username
should probably default to the value of
<A HREF="#cupsUser"><CODE>cupsUser()</CODE></A> to make things easier
on the user.
<H2>PPD Services</H2>
<P>CUPS includes functions to access and manipulate PostScript Printer
@@ -3259,6 +3318,9 @@ password = cupsGetPassword("Please enter a password:");
<P>
<A HREF="#cupsServer">cupsServer()</A>,
<A HREF="#cupsSetPasswordCB">cupsSetPasswordCB()</A>,
<A HREF="#cupsSetServer">cupsSetServer()</A>,
<A HREF="#cupsSetUser">cupsSetUser()</A>,
<A HREF="#cupsUser()">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsGetPPD">cupsGetPPD()</A></H2>
@@ -4429,8 +4491,160 @@ server = cupsServer();
<P>
<A HREF="#cupsGetPassword">cupsGetPassword()</A>,
<A HREF="#cupsSetPasswordCB">cupsSetPasswordCB()</A>,
<A HREF="#cupsSetServer">cupsSetServer()</A>,
<A HREF="#cupsSetUser">cupsSetUser()</A>,
<A HREF="#cupsUser">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsSetPasswordCB">cupsSetPasswordCB()</A></H2>
<H3>Usage</H3>
<PRE>
void
cupsSetPasswordCB(const char *(*cb)(const char *prompt));
</PRE>
<H3>Arguments</H3>
<CENTER><TABLE WIDTH="80%" BORDER>
<TR>
<TH>Argument</TH>
<TH>Description</TH>
</TR>
<TR>
<TD>cb</TD>
<TD>The password callback function.</TD>
</TR>
</TABLE></CENTER>
<H3>Description</H3>
<P><CODE>cupsSetPasswordCB()</CODE> sets the callback function to use when
asking the user for a password. The callback function must accept a single
character string pointer (the prompt string) and return <CODE>NULL</CODE>
if the user did not enter a password string or a pointer to the password
string otherwise.
<H3>Example</H3>
<PRE>
#include &lt;cups/cups.h&gt;
const char *
my_password_cb(const char *prompt)
{
return (getpass(prompt));
}
...
char *password;
...
cupsSetPasswordCB(my_password_cb);
password = cupsGetPassword("Please enter a password:");
</PRE>
<H3>See Also</H3>
<P>
<A HREF="#cupsServer">cupsServer()</A>,
<A HREF="#cupsSetServer">cupsSetServer()</A>,
<A HREF="#cupsSetUser">cupsSetUser()</A>,
<A HREF="#cupsUser()">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsSetServer">cupsSetServer()</A></H2>
<H3>Usage</H3>
<PRE>
void
cupsSetServer(const char *server);
</PRE>
<H3>Arguments</H3>
<CENTER><TABLE WIDTH="80%" BORDER>
<TR>
<TH>Argument</TH>
<TH>Description</TH>
</TR>
<TR>
<TD>server</TD>
<TD>The default server to use.</TD>
</TR>
</TABLE></CENTER>
<H3>Description</H3>
<P><CODE>cupsSetServer()</CODE> sets the default server to use for
the CUPS API. If the <CODE>server</CODE> argument is <CODE>NULL</CODE>,
the default server is used.
<H3>Example</H3>
<PRE>
#include &lt;cups/cups.h&gt;
cupsSetServer("foo.bar.com");
</PRE>
<H3>See Also</H3>
<P>
<A HREF="#cupsServer">cupsServer()</A>,
<A HREF="#cupsSetPasswordCB">cupsSetPasswordCB()</A>,
<A HREF="#cupsSetUser">cupsSetUser()</A>,
<A HREF="#cupsUser()">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsSetUser">cupsSetUser()</A></H2>
<H3>Usage</H3>
<PRE>
void
cupsSetUser(const char *user);
</PRE>
<H3>Arguments</H3>
<CENTER><TABLE WIDTH="80%" BORDER>
<TR>
<TH>Argument</TH>
<TH>Description</TH>
</TR>
<TR>
<TD>user</TD>
<TD>The user name string to use.</TD>
</TR>
</TABLE></CENTER>
<H3>Description</H3>
<P><CODE>cupsSetUser()</CODE> sets the default user name for authentication.
If the <CODE>user</CODE> argument is <CODE>NULL</CODE> then the current
login user is used.
<H3>Example</H3>
<PRE>
#include &lt;cups/cups.h&gt;
...
cupsSetUser("root");
</PRE>
<H3>See Also</H3>
<P>
<A HREF="#cupsServer">cupsServer()</A>,
<A HREF="#cupsSetPasswordCB">cupsSetPasswordCB()</A>,
<A HREF="#cupsSetServer">cupsSetServer()</A>,
<A HREF="#cupsUser()">cupsUser()</A>
<!-- NEW PAGE --><H2><A NAME="cupsTempFile">cupsTempFile()</A></H2>
<H3>Usage</H3>
@@ -7047,7 +7261,8 @@ http = httpConnect(cupsServer(), ippPort());
<H3>See Also</H3>
<A HREF="#cupsServer"><CODE>cupsServer()</CODE></A>
<A HREF="#cupsServer"><CODE>cupsServer()</CODE></A>,
<A HREF="#ippSetPort"><CODE>ippSetPort()</CODE></A>
<!-- NEW PAGE --><H2><A NAME="ippRead">ippRead()</A></H2>
@@ -7112,6 +7327,49 @@ if (status == IPP_DATA)
<A HREF="#ippWrite"><CODE>ippWrite()</CODE></A>
<!-- NEW PAGE --><H2><A NAME="ippSetPort">ippSetPort()</A></H2>
<H3>Usage</H3>
<PRE>
void
ippSetPort(int port);
</PRE>
<H3>Arguments</H3>
<CENTER><TABLE WIDTH="80%" BORDER>
<TR>
<TH>Argument</TH>
<TH>Description</TH>
</TR>
<TR>
<TD>port</TD>
<TD>The port number to use</TD>
</TR>
</TABLE></CENTER>
<H3>Description</H3>
<P>The <CODE>ippSetPort()</CODE> function sets the default IPP port number
for requests.
<H3>Example</H3>
<PRE>
#include &lt;cups/http.h>
#include &lt;cups/ipp.h>
...
ippSetPort(8631);
</PRE>
<H3>See Also</H3>
<A HREF="#ippPort"><CODE>ippPort()</CODE></A>
<!-- NEW PAGE --><H2><A NAME="ippTimeToDate">ippTimeToDate()</A></H2>
<H3>Usage</H3>
+3 -3
Ver Arquivo
@@ -3,7 +3,7 @@
<HEAD>
<TITLE> CUPS Software Performance Specification</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2001, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SPS-1.1">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
@@ -24,7 +24,7 @@ PRE { font-size: 9.0pt }
<H1> CUPS Software Performance Specification</H1></A><BR>
CUPS-SPS-1.1<BR>
Easy Software Products<BR>
Copyright 1997-2000, All Rights Reserved<BR>
Copyright 1997-2001, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
@@ -89,7 +89,7 @@ following sections:</P>
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description </LI>
<LI>CUPS-IPP-1.1: CUPS Implmentation of IPP </LI>
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP </LI>
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.1: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual </LI>
BIN
Ver Arquivo
Arquivo binário não exibido.
+3 -3
Ver Arquivo
@@ -3,7 +3,7 @@
<HEAD>
<TITLE> CUPS Software Security Report</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2001, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SSR-1.1">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
@@ -24,7 +24,7 @@ PRE { font-size: 9.0pt }
<H1> CUPS Software Security Report</H1></A><BR>
CUPS-SSR-1.1<BR>
Easy Software Products<BR>
Copyright 1997-2000, All Rights Reserved<BR>
Copyright 1997-2001, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
@@ -92,7 +92,7 @@ sections:</P>
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description </LI>
<LI>CUPS-IPP-1.1: CUPS Implmentation of IPP </LI>
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP </LI>
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.1: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual </LI>
BIN
Ver Arquivo
Arquivo binário não exibido.
+3 -3
Ver Arquivo
@@ -3,7 +3,7 @@
<HEAD>
<TITLE> DRAFT - CUPS Software Test Plan</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2001, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-STP-1.1">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
@@ -24,7 +24,7 @@ PRE { font-size: 9.0pt }
<H1> DRAFT - CUPS Software Test Plan</H1></A><BR>
CUPS-STP-1.1<BR>
Easy Software Products<BR>
Copyright 1997-2000, All Rights Reserved<BR>
Copyright 1997-2001, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
@@ -86,7 +86,7 @@ EPSON printers are included that use these filters. </P>
<UL>
<LI>CUPS-CMP-1.1: CUPS Configuration Management Plan </LI>
<LI>CUPS-IDD-1.1: CUPS System Interface Design Description </LI>
<LI>CUPS-IPP-1.1: CUPS Implmentation of IPP </LI>
<LI>CUPS-IPP-1.1: CUPS Implementation of IPP </LI>
<LI>CUPS-SAM-1.1.x: CUPS Software Administrators Manual </LI>
<LI>CUPS-SDD-1.1: CUPS Software Design Description </LI>
<LI>CUPS-SPM-1.1.x: CUPS Software Programming Manual </LI>
BIN
Ver Arquivo
Arquivo binário não exibido.
+64 -55
Ver Arquivo
@@ -2,11 +2,11 @@
<HTML>
<HEAD>
<TITLE> CUPS Software Users Manual</TITLE>
<META NAME="AUTHOR" CONTENT="Easy Software Products">
<META NAME="COPYRIGHT" CONTENT="Copyright 1997-2000, All Rights Reserved">
<META NAME="DOCNUMBER" CONTENT="CUPS-SUM-1.1.1">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<STYLE>
<META NAME="author" CONTENT="Easy Software Products">
<META NAME="copyright" CONTENT="Copyright 1997-2001, All Rights Reserved">
<META NAME="docnumber" CONTENT="CUPS-SUM-1.1.6">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1">
<STYLE><!--
BODY { font-family: serif; font-size: 11.0pt }
H1 { font-family: sans-serif; font-size: 20.0pt }
H2 { font-family: sans-serif; font-size: 17.0pt }
@@ -17,19 +17,19 @@ H6 { font-family: sans-serif; font-size: 8.0pt }
SUB { font-size: 8.0pt }
SUP { font-size: 8.0pt }
PRE { font-size: 9.0pt }
</STYLE>
--></STYLE>
</HEAD>
<BODY BGCOLOR="#ffffff">
<CENTER><A HREF="#CONTENTS"><IMG SRC="images/cups-large.gif" BORDER="0" WIDTH="100%"><BR>
<H1> CUPS Software Users Manual</H1></A><BR>
CUPS-SUM-1.1.1<BR>
CUPS-SUM-1.1.6<BR>
Easy Software Products<BR>
Copyright 1997-2000, All Rights Reserved<BR>
Copyright 1997-2001, All Rights Reserved<BR>
</CENTER>
<HR>
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
<BR>
<BR><B><A HREF="#1">Preface</A></B>
<BR></BR>
<BR></BR><B><A HREF="#1">Preface</A></B>
<UL>
<LI><A HREF="#1_1">System Overview</A></LI>
<LI><A HREF="#1_2">Document Overview</A></LI>
@@ -125,7 +125,7 @@ Copyright 1997-2000, All Rights Reserved<BR>
<HR>
<H1 ALIGN="RIGHT"><A NAME="1">Preface</A></H1>
<P>This software users manual describes how to use the Common UNIX
Printing System<SUP>TM</SUP> (&quot;CUPS<SUP>TM</SUP>&quot;) Version 1.1.1. </P>
Printing System<SUP>TM</SUP> (&quot;CUPS<SUP>TM</SUP>&quot;) Version 1.1.6. </P>
<H2><A NAME="1_1">System Overview</A></H2>
<P>CUPS provides a portable printing layer for UNIX&reg;-based operating
systems. It has been developed by <A HREF="http://www.easysw.com">Easy
@@ -143,7 +143,8 @@ options to support real-world printing under UNIX. </P>
are used to support non-PostScript printers. Sample drivers for HP and
EPSON printers are included that use these filters. </P>
<!-- NEED 2in ---->
<!-- NEED 2in -->
</!-->
<H2><A NAME="1_2">Document Overview</A></H2>
<P>This software users manual is organized into the following sections:</P>
<UL>
@@ -162,12 +163,12 @@ and their meanings and uses are explained below:
<TR><TH>Example</TH><TD>&nbsp;&nbsp;&nbsp;</TD><TH>Description</TH></TR>
<TR><TD>&nbsp;</TD></TR>
<TR VALIGN="TOP"><TD><CODE>lpstat</CODE>
<BR><CODE> lpstat(1)</CODE></TD><TD>&nbsp;&nbsp;&nbsp;</TD><TD>The names of commands;
the first mention of a command or function in a chapter is followed by
a manual page section number.</TD></TR>
<BR></BR><CODE> lpstat(1)</CODE></TD><TD>&nbsp;&nbsp;&nbsp;</TD><TD>The names of
commands; the first mention of a command or function in a chapter is
followed by a manual page section number.</TD></TR>
<TR><TD>&nbsp;</TD></TR>
<TR VALIGN="TOP"><TD><VAR>/var</VAR>
<BR><VAR> /usr/share/cups/data/testprint.ps</VAR></TD><TD>&nbsp;&nbsp;&nbsp;</TD><TD>
<BR></BR><VAR> /usr/share/cups/data/testprint.ps</VAR></TD><TD>&nbsp;&nbsp;&nbsp;</TD><TD>
File and directory names.</TD></TR>
<TR><TD>&nbsp;</TD></TR>
<TR VALIGN="TOP"><TD NOWRAP><TT>Request ID is Printer-123</TT></TD><TD>
@@ -182,21 +183,21 @@ written using the period (.) to indicate the decimal point.</TD></TR>
</TABLE>
</CENTER>
<!-- NEED 3in ---->
</P>
<!-- NEED 3in -->
</!--></P>
<H2><A NAME="1_4">Abbreviations</A></H2>
The following abbreviations are used throughout this manual:
<UL>
<DL>
<DT>kb </DT>
<DD>Kilobytes, or 1024 bytes
<BR>&nbsp; </DD>
<BR></BR>&nbsp; </DD>
<DT>Mb </DT>
<DD>Megabytes, or 1048576 bytes
<BR>&nbsp; </DD>
<BR></BR>&nbsp; </DD>
<DT>Gb </DT>
<DD>Gigabytes, or 1073741824 bytes
<BR>&nbsp; </DD>
<BR></BR>&nbsp; </DD>
</DL>
</UL>
<H2><A NAME="1_5">Other References</A></H2>
@@ -204,11 +205,11 @@ written using the period (.) to indicate the decimal point.</TD></TR>
<DL>
<DT>CUPS Software Administrators Manual </DT>
<DD>An administration guide for the CUPS software.
<BR>&nbsp; </DD>
<BR></BR>&nbsp; </DD>
<DT>CUPS Software Programmers Manual </DT>
<DD>A programmer guide for interfacing with and/or extending the CUPS
software.
<BR>&nbsp; </DD>
<BR></BR>&nbsp; </DD>
</DL>
</UL>
<H1 ALIGN="RIGHT"><A NAME="OVERVIEW">1 - Printing System Overview</A></H1>
@@ -392,7 +393,8 @@ Collate=True</CODE> option to get collated copies : </P>
</PRE>
</UL>
<!-- NEED 3in ---->
<!-- NEED 3in -->
</!-->
<H2><A NAME="3_5">Checking the Printer Status from the Command-Line</A></H2>
<P>The <CODE>lpstat</CODE> command can be used to check for jobs that
you have submitted for printing: </P>
@@ -413,7 +415,8 @@ printer DeskJet now printing DeskJet-1.
</PRE>
</UL>
<!-- NEED 2in ---->
<!-- NEED 2in -->
</!-->
<P>Use the <CODE>-o</CODE> and <CODE>-p</CODE> options together to show
the jobs and the printers: </P>
<UL>
@@ -464,7 +467,8 @@ to print in landscape orientation: </P>
</PRE>
</UL>
<!-- NEED 2in ---->
<!-- NEED 2in -->
</!-->
<H3><A NAME="4_1_2">Selecting the Media Size, Type, and Source</A></H3>
<P>The <CODE>-o media=xyz</CODE> option sets the media size, type,
and/or source: </P>
@@ -477,7 +481,8 @@ and/or source: </P>
</PRE>
</UL>
<!-- NEED 3in ---->
<!-- NEED 3in -->
</!-->
<P>The available media sizes, types, and sources depend on the printer,
but most support the following options (case is not significant): </P>
<UL>
@@ -724,7 +729,8 @@ printed image, much like the tint control on your television: </P>
</PRE>
</UL>
<!-- NEED 3in ---->
<!-- NEED 3in -->
</!-->
<P>The <CODE>value</CODE> argument is a number from -360 to 360 and
represents the color hue rotation. The following table summarizes the
change you'll see with different colors:
@@ -754,8 +760,8 @@ of the colors in an image, much like the color knob on your television: </P>
from 0 to 200. A color saturation of 0 produces a black-and-white
print, while a value of 200 will make the colors extremely intense. </P>
<P>The default saturation is 100.
<!-- NEED 4in ---->
</P>
<!-- NEED 4in -->
</!--></P>
<H2><A NAME="4_6">HP-GL/2 Options</A></H2>
<P>The following options apply to HP-GL/2 files. </P>
<H3><A NAME="4_6_1">Printing in Black</A></H3>
@@ -919,12 +925,12 @@ deleted with the <CODE>lpadmin(8)</CODE> command by the administrator. </P>
<H2 ALIGN="CENTER"><A NAME="6_1">Common UNIX Printing System License
Agreement</A></H2>
<P ALIGN="CENTER">Copyright 1997-2000 by Easy Software Products
<BR> 44141 AIRPORT VIEW DR STE 204
<BR> HOLLYWOOD, MARYLAND 20636-3111 USA
<BR>
<BR> Voice: +1.301.373.9603
<BR> Email: <A HREF="mailto:cups-info@cups.org">cups-info@cups.org</A>
<BR> WWW: <A HREF="http://www.cups.org">http://www.cups.org</A></P>
<BR></BR> 44141 AIRPORT VIEW DR STE 204
<BR></BR> HOLLYWOOD, MARYLAND 20636-3111 USA
<BR></BR>
<BR></BR> Voice: +1.301.373.9603
<BR></BR> Email: <A HREF="mailto:cups-info@cups.org">cups-info@cups.org</A>
<BR></BR> WWW: <A HREF="http://www.cups.org">http://www.cups.org</A></P>
<H3><A NAME="6_1_1">Introduction</A></H3>
<P>The Common UNIX Printing System<SUP>TM</SUP>, (&quot;CUPS<SUP>TM</SUP>&quot;),
is provided under the GNU General Public License (&quot;GPL&quot;) and GNU
@@ -974,19 +980,19 @@ the address shown above. </P>
utilizes the GNU GhostScript 5.50 core to convert PostScript files into
a stream of raster images. For binary distribution licensing of this
software, please contact: <BLOCKQUOTE> Miles Jones
<BR> Director of Marketing
<BR> Artifex Software Inc.
<BR> 454 Las Gallinas Ave., Suite 108
<BR> San Rafael, CA 94903 USA
<BR> Voice: +1.415.492.9861
<BR> Fax: +1.415.492.9862
<BR> EMail: <A HREF="mailto:info@arsoft.com">info@arsoft.com</A></BLOCKQUOTE>
<BR></BR> Director of Marketing
<BR></BR> Artifex Software Inc.
<BR></BR> 454 Las Gallinas Ave., Suite 108
<BR></BR> San Rafael, CA 94903 USA
<BR></BR> Voice: +1.415.492.9861
<BR></BR> Fax: +1.415.492.9862
<BR></BR> EMail: <A HREF="mailto:info@arsoft.com">info@arsoft.com</A></BLOCKQUOTE>
</P>
<P>The &quot;pdftops&quot; filter is based on the Xpdf 0.90 software. For binary
distribution licensing of this software, please contact: <BLOCKQUOTE>
Derek B. Noonburg
<BR> Email: <A HREF="mailto:derekn@foolabs.com">derekn@foolabs.com</A>
<BR> WWW: <A HREF="http://www.foolabs.com/xpdf/">
<BR></BR> Email: <A HREF="mailto:derekn@foolabs.com">derekn@foolabs.com</A>
<BR></BR> WWW: <A HREF="http://www.foolabs.com/xpdf/">
http://www.foolabs.com/xpdf/</A></BLOCKQUOTE></P>
<H3><A NAME="6_1_4">Support</A></H3>
<P>Easy Software Products sells software support for CUPS as well as a
@@ -998,7 +1004,8 @@ find out more at our web site: </P>
</PRE>
</UL>
<!-- NEW PAGE ---->
<!-- NEW PAGE -->
</!-->
<H2><A NAME="6_2">GNU GENERAL PUBLIC LICENSE</A></H2>
<P>Version 2, June 1991 </P>
<PRE>
@@ -1053,7 +1060,8 @@ patent must be licensed for everyone's free use or not licensed at all. </P>
<P>The precise terms and conditions for copying, distribution and
modification follow. </P>
<H4>GNU GENERAL PUBLIC LICENSE
<BR> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</H4>
<BR></BR> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
MODIFICATION</H4>
<OL START="0">
<LI>This License applies to any program or other work which contains a
notice placed by the copyright holder saying it may be distributed
@@ -1255,7 +1263,8 @@ DAMAGES. </LI>
</OL>
<H4>END OF TERMS AND CONDITIONS</H4>
<!-- NEW PAGE ---->
<!-- NEW PAGE -->
</!-->
<H2><A NAME="6_3">GNU LIBRARY GENERAL PUBLIC LICENSE</A></H2>
<P>Version 2, June 1991 </P>
<PRE>
@@ -1385,13 +1394,13 @@ and copy and distribute such modifications or work under the terms of
Section 1 above, provided that you also meet all of these conditions: </P>
<OL TYPE="a">
<LI>The modified work must itself be a software library. </LI>
<P>
<P></P>
<LI>You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change. </LI>
<P>
<P></P>
<LI>You must cause the whole of the work to be licensed at no charge
to all third parties under the terms of this License. </LI>
<P>
<P></P>
<LI>If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses the
facility, other than as an argument passed when the facility is
@@ -1499,16 +1508,16 @@ containing the modified Library. (It is understood that the user who
changes the contents of definitions files in the Library will not
necessarily be able to recompile the application to use the modified
definitions.) </LI>
<P>
<P></P>
<LI>Accompany the work with a written offer, valid for at least three
years, to give the same user the materials specified in Subsection 6a,
above, for a charge no more than the cost of performing this
distribution. </LI>
<P>
<P></P>
<LI>If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place. </LI>
<P>
<P></P>
<LI>Verify that the user has already received a copy of these
materials or that you have already sent this user a copy. </LI>
</OL>
@@ -1535,7 +1544,7 @@ otherwise permitted, and provided that you do these two things: </P>
<LI>Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities. This
must be distributed under the terms of the Sections above. </LI>
<P>
<P></P>
<LI>Give prominent notice with the combined library of the fact that
part of it is a work based on the Library, and explaining where to
find the accompanying uncombined form of the same work. </LI>

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais